Dockerfile

1、什么是 Dockerfile 文件

官网

通过自定义的命令构建我们自己的镜像

每行指令都会生成一个镜像(中间镜像,用于缓存,不要缓存的话 --no-cache),返回我们最后打包好的镜像

关键字

作用

FORM

当前镜像是基于哪个官方镜像(第一个指令必须是 From)

MAINTAINER

镜像维护者的姓名和邮箱 (废弃)

RUN

构建镜像时需要运行的指令

EXPOSE

当前容器对外暴露的端口号

WORKDIR

指定在创建容器后,终端默认登陆进来的工作目录

ENV

用来在构建镜像过程中设置环境变量

ADD

将宿主机目录下的文件拷贝到镜像(ADD 会自动处理 URL 和解压tar 包)

COPY

将宿主机目录下的文件拷贝到镜像

VOLUME

容器数据库卷,用于数据保存和持久化

CMD

指定一个容器启动时要运行的命令,Dockerfile中可以有多个 CMD命令,但只有最后一个会生效,CMD 会被docker run 之后的参数替换

ENTRYPOINT

指定一个容器启动时要运行的命令,ENTRYPOINT 和 CMD 一样,都是指定容器启动程序及参数

2、运行 Dockerfile 文件


docker build -t conterName .(路径,. 表示当前路径)


Docker compose

1、docker compose 是Docker 官方的另一个开源项目,用于对多个容器定义和运行的快速编排

比如一个项目依赖于 Redis 、 MqRabbit、Mysql 环境然后才能正常启动,这时候就可以用 docker compose 对容器启动做编排

项目(Project):有多个服务共同组成的一个完整的业务单元,定义 docker-compose.yml中

服务(Service): 一个服务对应一个应用容器,在一个项目中可以存在多个服务

2、下载安装 docker compose


sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose sudo chmod +x /usr/local/bin/docker-compose


3、编写 docker-compose.yml 文件将要运行的容器进行编排

a. 创建一个 docker-compose.yml 文件(官方建议命名)

b. 编写格式


version: "3.0" #compose 的版本号 services:   mysql:   #服务名唯一   built:       context: /path   #Dockerfile 文件的路径       #先将 Dockerfile 文件上传服务器,     #然后在 docker-compose.yml 文件用 build 的指令来将指令路径下的 Dockerfile 文件创建成镜像       container_name: mysql #相当于docker run 中的 --name       image: mysql:latest #创建当前这个服务使用的镜像是谁(指定镜像)       ports:         - "3306:3306" #最好用引号抱起来         - "889:889"       volumes: #宿主机和容器中目录中的数据卷共享         - /home/super:/user/local   #宿主机绝对路径 :容器绝对路径         #或者可以直接指定卷(宿主机会自动创建)         - mysqldata:/var/lib/msql         - mysqlconf:/etc/mysql       network: #指定网络,用于容器中的通信         - hello #网桥 , 要在下方定义 hello 网桥     environment: #指定运行时要的账号密钥设置     - MYSQL_ROOT_PASSWORD=root       redis:   #服务名唯一   image: redis:latest #创建当前这个服务使用的镜像是谁(指定镜像)   ports:     - "6379:6379" networks: - hello #默认是 bridge 查看网桥 docker network ls # 上面两行的写法会创建 项目名_hello 的网桥名, #如果不想要这样的网桥名,要先在服务器创建 hello 网桥, docker network -d create bridge hello external: #然后使用指定网桥(用已经用的,不创建),volumes 也是同理 true volumes:   #查看 docker 共享的文件 docker volume ls   #查看目录细节 docker inspect hello_mysqldata ,在细节中有目录的据对路径   mysqldata:   mysqlconf:


c. 在 docker-compose.yml 文件的目录下, 运行 docker-compose


docker-compose up -d 参数说明: up 表示不重启正常的容器,         -d 后台启动


d. build 指令先构建镜像,再使用镜像创建容器

先将 Dockerfile 文件上传服务器,然后在 docker-compose.yml 文件用 build 的指令来将指令路径下的 Dockerfile 文件创建成镜像

不过对于多台服务集群的情况下,可以将镜像服务长传云,然后直接用云上将镜像下载下来运行