前言 📝

Docker基本使用教程导航 🚥🚥🚥

  1. 💡 docker准备工作
  2. 🚀 docker常用命令
  3. 🎨 容器数据卷⇦ 当前位置 🪂
  4. 📍 docker网络

1. 使用数据卷

1.1 使用命令方式挂载 -v

1
2
3
4
docker run -it -v 主机目录:容器内目录

# 测试
docker run -it -v /home/test:/home centos /bin/bash

image.png

2. 具名挂载和匿名挂载

具名挂载是指你指定了一个特定的卷名,这个卷名在宿主机中是唯一的,并且可以在不同的容器之间共享。匿名挂载则没有指定卷名,Docker会自动生成一个卷名。

1
2
3
4
5
6
7
8
9
10
11
12
13
# 匿名挂载
docker run -d -P --name nginx_alvis -v /etc/nginx nginx # 匿名挂载不指定主机目录

# 匿名挂载,我们在-v的时候只写了容器内的路径,没有写容器内的路径,这样的卷没有名字。

# 具名挂载
docker run -d -P --name nginx_cj -v juming:/etc/nginx nginx

# 查看挂载卷的路径
docker volume inspect juming

# 查看所有的卷
docker volume ls

image.png

3. 初始DockerFile

DockerFile就是用来构建docker镜像的构建文件!命令脚本!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 创建一个dockerfile文件
# 编写dockerfile文件
FROM centos

VOLUME ["volume01", "volume02"]

CMD echo "====END===="
CMD /bin/bash

# 在创建镜像的时候挂载两个卷

# 创建镜像
docker build -f /home/dockerfile -t alvis/centos .

# 运行镜像
docker run -it alvis/centos /bin/bash

# 查看容器的信息
docker inspect 容器id

通过dockerfile创建镜像的挂载卷

image.png

3.1 DokcerFile的构建过程

[!info] 基础知识

  1. 每个保留关键字(指令)都必须是大写字母
  2. 执行顺序是从上到下以此执行
  3. ‘’#‘’ 表示注释
  4. 每一个指令都会创建提交一个新的镜像层

3.2 DockerFile的指令

1
2
3
4
5
6
7
8
9
10
11
12
FROM        # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的,姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露的端口
CMD # 指定这个容器启动的时候要运行的命令, 只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令
COPY # 类似ADD 将我们文件拷贝到镜像中
ENV # 构建的时候我们设置环境变量

3.3 构建自己的centos

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FROM centos:7
MAINTAINER alvis<alvis.goodday@gmail.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "===END==="
CMD /bin/bash

3.4 CMD和ENTRYPOINT的区别

1
2
CMD         # 指定这个容器启动的时候要运行的命令, 只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 编写测试cmd的dockerfile
FROM centos:7
CMD ["ls", "-a"] # 启动容器时候执行的命令

# 构建镜像
docker build -f cmdDockerfile -t cmdtest .

# 运行镜像
docker run -it cmdtest # 没有问题。会执行ls -a列出所有的目录

# 我想在追加一个命令 执行ls -al 列出所有文件的详细信息
docker run -it cmdtest l # 会报错。找不到对应的命令

# 正确的方式
docker run -it cmdtest ls -al
1
2
3
4
5
6
7
8
9
10
11
12
# 编写测试ENTRYPOINT的dockerfile文件
FROM centos:7
ENTRYPOINT ["ls", "-a"]

# 构建镜像
docker build -f entrypointDockerfile -t entrypointtest .

# 运行镜像
docker run -it entrypointtest # 没有问题。会执行ls -a列出所有的目录

# 我想在追加一个命令 执行ls -al 列出所有文件的详细信息
docker run -it entrypointtest l # 没有问题会追加命令

4. 发布镜像到dockerhub、阿里

1
2
3
4
5
6
7
8
9
10
11
12
13
# 发布到dockerhub
# 登录
docker login -u 账号

# 登录成功之后就可以push到仓库
docker push 作者/镜像名称:标签


# 发布到阿里云
# 1. 登录到阿里云并找到镜像服务仓库
# 2. 创建命名空间并创建镜像仓库
# 3. 按照阿里云的命令直接敲

5. 数据卷容器

实现多个容器之间的数据共享

1
2
3
4
5
6
7
8
A --volumes-from B    # A继承B


# 启动两个容器
docker run -it --name docker01 alvis/centos /bin/bash

docker run -it --name docker02 --volumes-from docker01 alvis/centos /bin/bash

image.png

[!info]
容器之间配置信息的传递,数据卷容器的生命周期一直持续到没有容器使用为止。
但是一旦你持久化到了本地,这个时候,本地的数据是不会删除的。

6. 小结

image.png