Dockerfile 和 Docker-compose 学习笔记

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 文件创建成镜像

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值