0%

docker基础

docker

docker安装

1
2
3
4
5
6
7
8
9
10
# 1、yum 包更新到最新
yum update
# 2、 安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 3、 设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 4、 安装docker,出现输入的界面都按y
yum install -y docker-ce
# 5、 查看docker版本,验证是否安装成功
docker -v

docker架构

image-20200416205059220

  • daemon: docker在机器上以守护进程(后台运行的进程)的形式存在,客户端发送docker命令操作该进程
  • image(镜像): 镜像就是一堆只读层(read-only layer)的统一视角,不可变
  • container:(容器): 容器 = 镜像 + 读写层,关系就像类与对象的关系;一个运行态容器(running container)被定义为一个可读写的统一文件系统加上隔离的进程空间和包含其中的进程,注意,一个容器只能有一个进程隔离空间
  • repository: 仓库,类似maven仓库,也有公共仓库和私有仓库

docker镜像加速

  • 打开阿里云
  • 搜索容器镜像服务
  • 找到镜像加速器,复制粘贴配置即可

docker命令

服务相关命令

  • 启动docker服务

    1
    systemctl start docker
  • 停止docker服务

    1
    systemctl stop docker
  • 重启docker服务

    1
    systemctl restart docker
  • 查看docker服务状态

    1
    systemctl status docker
  • 设置开机启动docker服务

    1
    systemctl enable docker

镜像相关命令

  • 查看镜像

    1
    2
    3
    4
    # 1、 查看所有镜像详细信息
    docker images
    # 2、 查看所有镜像id
    docker images -q
  • 搜索镜像(查看有哪些可以下载)

    1
    docker search
  • 拉取,下载镜像

    1
    docker pull
  • 删除镜像

    1
    2
    3
    4
    # 1、删除单个镜像
    docker rmi <imageid>|<repository:tag>
    # 2、 删除所有镜像
    docker rmi `docker images -q`

容器相关命令

  • 创建并运行容器

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    docker run 
    ######## 可配置参数
    -i 保持容器运行
    -t 分配一个终端,exit容器就会关闭
    --name 起名
    --expose 公开一个或多个端口
    -d 以(守护)后台模式运行容器,并打印容器id,进入终端需要输入 docker exec -it <name> /bin/bash,exit容器不会关闭
    -l 添加元数据
    -p <主机port>:<容器port> 将容器端口映射到主机端口
    -P 随机映射端口
    --rm 当容器退出时自动移除这个容器
    centos:7 <镜像名>:<tag>/<imageid>
    /bin/bash 初始化运行命令
  • 查看正在运行的容器

    1
    docker ps
  • 查看全部容器

    1
    docker ps -a
  • 启动容器

    1
    docker start
  • 停止容器

    1
    docker stop
  • 删除容器

    1
    docker rm
  • 删除所有不在运行的容器

    1
    docker rm `docker ps -aq`
  • 查看容器信息

    1
    docker inspect

深入理解docker命令

docker容器的数据卷

数据卷概念

image-docker-data-volume

思考:

  • Docker容器删除后,容器中产生的数据是否会随之销毁?
  • Docker容器与外部机器是否可以直接交换文件?
  • 容器之间是否可以进行数据交互?

数据卷:

  • 数据卷是宿主机中的一个目录或文件
  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步
  • 一个数据卷可以被多个容器同时挂载
  • 一个容器也可以被挂载多个数据卷

注意事项:

  • 目录必须是绝对路径
  • 如果目录不存在,会自动创建

作用:

  • 容器数据持久化
  • 外部机器和容器间接通信
  • 容器之间数据交换

配置数据卷

1
docker run -it --name=test -v /root/data:/root/data centos:7

数据卷容器

多容器进行数据交换

  • 多个容器挂载同一个数据卷
  • 数据卷容器

image-docker-volume-container

配置数据卷容器

1
2
3
4
5
# 1、 创建启动c3数据卷容器,使用-v参数设置数据卷
docker run -it --name=c3 -v /volume centos:7
# 2、 创建启动c1、c2容器,使用--volumes-from参数设置数据卷
docker run -it --name=c1 --volumes-from c3 centos:7
docker run -it --name=c2 --volumes-from c3 centos:7

docker应用部署

mysql部署

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 1、搜索mysql镜像
docker search mysql
# 2、拉取mysql镜像
docker pull mysql:5.6
# 3、创建容器,设置端口映射、目录映射
## 在/root目录下创建mysql目录用于存出mysql数据信息
mkdir ~/mysql
cd ~/mysql

## -p:端口映射 -v:目录映射 -e:环境
docker run -id \
-p 3306:3306 \
--name=c_mysql \
-v $PWD/conf:/etc/mysql/conf.d \
-v $PWD/logs:/logs \
-v $PWD/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.6

dockerfile

镜像原理

思考:

  • docker镜像的本质是什么?
  • docker中一个centos镜像为什么只有200M,而一个centos操作系统的iso文件要几个G?
  • docker中一个tomcat镜像为什么有500M,而tomcat的安装包才70多M?
  • docker镜像是由特殊的文件系统叠加而成

    ​ 最底端是bootfs,并使用宿主机的bootfs

    ​ 第二层是root文件系统rootfs,称为base image

    ​ 然后再往上可以叠加其他的镜像文件

  • 统一文件系统(Union File System)技术能够将不同层整合成一个文件系统,为这些层提供了一个统一的视角,这样就隐藏了多层的存在,在用户的角度看来,只存在一个文件系统

  • 一个镜像可以放在另一个镜像的上面,位于下面的镜像称为父镜像,最底部的镜像称为基础镜像

  • 当从一个镜像启动容器时,docker会在最顶层加载一个读写文件系统作为容器

image-docker-image

镜像制作

容器转为镜像

1
2
3
4
docker commit 容器id 镜像名称:版本号
## 镜像不能直接传输,需要先压缩
docker save -o 压缩文件名称 镜像名称:版本号
docker load -i 压缩文件名称

dockerfile概念

  • dockerfile是一个文本文件
  • 每一条指令构建一层,基于基础镜像,最终构建成一个新的镜像

dockerfile制作

1
2
3
4
5
1、定义父镜像: FROM centos:7
2、定义作者信息: MAINTAINER iddunk<iddunk@example.com>
3、执行安装vim命令: RUN yum install -y vim
4、定义默认的工作目录: WORKDIR /usr
5、定义容器启动执行的命令: CMD /bin/bash

springboot项目部署

1
2
3
4
5
1、制作父镜像: FROM java:8
2、定义作者信息: MAINTAINER: iddunk<iddunk@example.com>
3、将jar包添加到容器: ADD springboot.jar app.jar
4、定义容器启动执行的命令: CMD java -jar app.jar
5、通过dockerfile构建: docker build -f dockerfile文件路径 -t 镜像名称:版本

docker compose

docker compose概念

docker compose是一个编排多容器分布式部署的工具,提供命令集管理容器化应用的完整开发周期,包括服务构建,启动和停止。使用步骤:

  • 利用dockerfile定义运行环境镜像
  • 使用docker-compose.yml定义组成应用的各服务
  • 运行docker-compose up启动应用