在 Ubuntu 系统上使用 docker && docker-compose
环境: Ubuntu 22.04.3 LTS
软件安装 && 卸载
1 .Install
sudo apt install docker.io docker-compose
测试安装:
$ docker -v
Docker version 20.10.21, build 20.10.21-0ubuntu1~22.04.3
$ docker-compose -v
docker-compose version 1.29.2, build unknown
2. Uninstallation
卸载并清理所有数据:
$ sudo apt autoremove docker.io docker-compose --purge
使用
1. 模板文件是使用 Compose的核心, 涉及到的指令关键字也比较多. 但大家不用担心, 这里面大部分指令跟 docker run
相关参数的含义都是类似的
默认的模板文件名称为 docker-compose.yml
, 格式为 YAML
格式
Compose文件版本兼容列表: https://docs.docker.com/compose/compose-file/
注意: 模板, 根据自己需求修改
services: # 当前项目中的容器服务
redis01: #服务名称
image: redis # 指定使用镜像 image:tag 相当于run image
container_name: redis021321 # 相当于run --name (内部访问可以代替ip)
ports: # 指定宿主机端口与容器端口映射, "宿主机端口:容器口"run -p
- "2379:2379"
networks: # 指定容器启动后使用哪个网络 run --network
- hello
volumes: # 指定容器与宿主机共享目录映射 run -v
# - "/root/apps:/apps" # 映射自定义路径
- redisdata:/apps # 自动
command: redis-server /... # 覆盖容器启动后默认执行的命令
environment: "redis-server --appendonly yes" # run 镜像之后覆盖容器内的默认环境变量
depends_on: # 在定义的服务启动之后启动
- mysql # 服务名称
mysql:
image: mysql:latest
container_name: mysql
ports:
- "3306:3306"
volumes:
- mysqldata:/var/lib/mysql # 自动映射mysql数据目录
- mysqlconf:/etc/mysql # 自动映射mysql配置目录
# environment: # 可使用 env_file代替
# - MYSQL-ROOT-PASSWORD=root # 使用 - 时用 =
# MYSQL-ROOT-PASSWORD: root # 这种方式用 :
env_file: # 从文件中读取 environment环境变量
- ./mysql.env
networks:
- hello
volumes: # 声明上面服务所使用的自动创建的卷名
redisdata: # 声明指定的卷名,compose自动创建卷名但是会在之前加上项目名
external: # 使用自定义卷名
true # true确定使用指定卷名(需使用命令手动创建卷名 docker volume create rediscontainer)
mysqldata: # 不使用 external自动映射目录
mysqlconf:
networks:
hello: # 声明指定的网桥
external: # 使用自定义外部网桥,compose自动创建网桥但是会在之前加上项目名
true # true确定使用指定网桥(需使用命令手动创建网桥 docker network create -d bridge hello)
2. build命令
指定 Dockerfile
所在文件夹的路径(可以是绝对路径,或者相对 docker-compose.yml
文件的路径). Compose将会利用它自动构建这个镜像, 然后使用这个镜像
services:
webapp:
build: # 自动创建镜像并运行
context: ./dir # 指定 Dockerfile所在文件夹的路径
dockerfile: Dockerfile-webapp # 指定 Dockerfile 文件名(如果文件名为 Dockerfile时可以忽略这条命令)
args: # arg 指令指定构建镜像时的变量\
container_name: demoapp
ports:
- "8080:8080"
networks:
- hello
depends_on:
- redis01
- mysql
3. 具体参考:
[1] Docker — 从入门到实践: https://vuepress.mirror.docker-practice.com/
[2] Docker Compose: https://vuepress.mirror.docker-practice.com/compose/
[3] Docker Compose配置文件详解: https://www.jianshu.com/p/2217cfed29d7
[4] docker-compose.yml配置文件编写详解: https://blog.csdn.net/qq_36148847/article/details/79427878
[5] docker-compose 官方安装教程: https://docs.docker.com/compose/install/