Docker

  • Post author:
  • Post category:其他




1.认识Docker


Docker是一个快速交付应用、运行应用的技术:

  1. 可以将程序及其依赖、运行环境一起打包为一个镜像,

    可以迁移到任意Linux操作系统
  2. 运行时利用沙箱机制形成隔离容器,各个应用互不干扰
  3. 启动、移除都可以通过一行命令完成,方便快捷


Docker和虚拟机的差异:

  • docker是一个系统进程;虚拟机是在操作系统中的操作系统. docker体积小、启动速度快、性能好;
  • 虚拟机体积大、启动速度慢、性能一般


Docker是一个CS架构的程序,由两部分组成:

  • 服务端(server): Docker守护进程,负责处理Docker指令,管理镜像、容器等
  • 客户端(client):通过命令或RestAPI向Docker服务端发送指令。可以在本地或远程向服务端发送指令。

    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2
    在这里插入图片描述



2.总结


镜像:


将应用程序及其依赖、环境、配置打包在一起


容器:


镜像运行起来就是容器,一个镜像可以运行多个容器


Docker结构:


服务端∶接收命令或远程请求,操作镜像或容器

客户端:发送命令或者请求到Docker服务端


DockerHub:


·一个镜像托管的服务器,类似的还有阿里云镜像服务,统称为DockerRegistry



3.Docker安装


docker安装



4.Docker命令

在这里插入图片描述

拉取nginx镜像

docker pull nginx

查看所有镜像

docker images

保存镜像到压缩包nginx.tar

docker save -o nginx.tar nginx

删除镜像

docker rmi nginx

加载压缩包为镜像

docker load -i nginx.tar



5.容器命令

在这里插入图片描述

1.创建并运行一个Nginx容器

docker run --name mn -p 80:80 -d nginx

-p [宿主机端口]:[虚拟机端口]

2.查看运行中的容器

docker ps

3.跟踪日志

docker logs

4.进入容器内执行命令

docker exec -it mn bash

在这里插入图片描述

5.停止容器

docker stop mn

6.查看所有容器

docker ps -a

7.启动容器

docker start nm

8.强制删除nm容器

docker rm -f nm



6.数据卷


数据卷的作用:

  1. 将容器与数据分离,解耦合
  2. 方便操作容器内数据
  3. 保证数据安全


数据卷操作:


docker volume create

docker volume ls

docker volume inspect

docker volume rm

docker volume prune

用一个案例来练习数据卷的挂载

将nginx的html文件挂载到本机的真实目录(

默认/var/lib/docker/volumes/

)下

1.创建并运行一个Nginx容器

docker run --name mn -p 80:80 -v html:/usr/share/nginx/html -d nginx

-v html:/usr/share/nginx/html表示把nginx容器中的数据挂载到数据卷中

2.查看所有容器

docker ps

3.查看数据卷位置

docker inspect html

4.进入数据卷目录

cd /var/lib/docker/volumes/html/_data

5.查看是否成功挂载

ls

6.用编辑器进行修改


总结:

  1. docker run的命令中通过-v参数挂载文件或目录到容器中
  • -v 数据卷名称:容器内目录
  • -v 宿主机文件:容器内文件
  • -v 宿主机目录:容器内目录
  1. 数据卷挂载与目录直接挂载的区别

    1. 数据卷挂载耦合度低,由docker来管理目录,但是

      目录较深,不好找
    2. 目录挂载耦合度高,需要我们自己管理目录,不过目

      录容易寻找查看



7.自定义镜像



1.镜像结构

镜像是分层结构,每一层称为一个Layer

  • Baselmage层:包含基本的系统函数库、环境变量、文件系统
  • Entrypoint:入口,是镜像中应用启动的命令
  • 其它:在Baselmage基础上添加依赖、安装程序、完成整个应用的

    安装和配置



2.Dockerfile

在这里插入图片描述

  1. Dockerfile的本质是一个文件,通过指令描述镜像的构建过程
  2. Dockerfile的第一行必须是FROM,从一个基础镜像来构建
  3. 基础镜像可以是基本操作系统,如Ubuntu。也可以是其他人制作好的镜像,例如: java:8-alpine

1.先创建一个目录,把这两个文件导入进去:

在这里插入图片描述

Dockerfile:

# 指定基础镜像
From java:8-alpine
#拷贝jar包作为入口
COPY ./docker-demo.jar /tmp/app.jar
# 暴露端口
EXPOSE 8090
# 入口,java项目的启动命令
ENTRYPOINT java -jar /tmp/app.jar

2.构建镜像

docker build -t web:1.0 .

3.启动镜像

docker run --name myweb -p 8090:8090 -d web:1.0



3.DockerCompose

DockerCompose其实就是一个文本文件,通过指令定义集群中的每个容器中如何运行。相当于把docker run命令转换成了yaml文件来执行。


dockerCompose



8.镜像仓库

除了DockerHub这样的官方仓库如阿里云等等,我们还可以自定义仓库用来存放镜像



1.创建自定义镜像仓库

1.在安装了DockerCompose后

2.先配置Docker信任地址:

# 打开要修改的文件
vi /etc/docker/daemon.json
# 添加内容:
"insecure-registries":["http://192.168.150.101:8080"]

3.建一个目录存放ui

 mkdir /tmp/registry-ui

4.建一个yml文件

cd /tmp/registry-ui/
touch docker-compose.yml

5.使用DockerCompose部署带有图象界面的DockerRegistry,命令如下:

docker-compose.yml的内容如下:

version: '3.0'
services:
  registry:
    image: registry
    volumes:
      - ./registry-data:/var/lib/registry
  ui:
    image: joxit/docker-registry-ui:static
    ports:
      - 8080:80
    environment:
      - REGISTRY_TITLE=My Registry
      - REGISTRY_URL=http://registry:5000
    depends_on:
      - registry

6.运行仓库

docker-compose up -d

7.随后访问虚拟机ip:8080即可访问了!



2.私有镜像仓库的推送和拉取

1.重新命名本地镜像,名称前缀为私有仓库的地址:192.168.239.131:8080/

docker tag nginx 192.168.239.131:8080/nginx

2.推送镜像

docker push nginx 192.168.239.131:8080/nginx

3.拉取镜像

docker pull nginx 192.168.239.131:8080/nginx



版权声明:本文为qq_53635765原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。