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 文件创建成镜像
不过对于多台服务集群的情况下,可以将镜像服务长传云,然后直接用云上将镜像下载下来运行