Docker
文档
安装
- 安装Docker并使用(Linux) - 阿里云文档
WARNING
- 腾讯云服务器选择的系统,带docker
- 阿里云服务器选择的系统,需要自行安装docker和docker-compose
安装docker
bash
$ dnf config-manager --add-repo=https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
$ dnf -y install dnf-plugin-releasever-adapter --repo alinux3-plus
$ dnf -y install docker-ce --nobest
安装docker-compose
bash
$ curl -L "https://github.com/docker/compose/releases/download/v2.2.0/docker-compose-linux-x86_64" -o /usr/local/bin/docker-compose
Docker 常用命令
bash
# 容器
$ docker ps -a
$ docker start <容器名/ID>
$ docker stop <容器名/ID>
$ docker restart <容器名/ID>
$ docker rm -f <容器名/ID>
$ docker container prune # 清理掉所有处于终止状态的容器
$ docker exec <容器名/ID> # 如果从这个容器退出,容器不会停止
$ docker exec -it <容器名/ID> sh #进入容器执行命令
$ docker attach <容器名/ID> # 如果从这个容器退出,会导致容器的停止
$ docker logs <容器名/ID>
$ docker stats
$ docker container update <容器名/ID> --memory="700m" # 修改正在运行容器的限制
# 镜像
$ docker images
$ docker rmi <镜像名/ID>
$ docker image prune -f # 删除 <none> 镜像
#
$ docker -v
$ systemctl status docker #查看Docker运行状态
$ systemctl start docker #运行Docker守护进程
$ systemctl enable docker #设置Docker开机自启动
Docker Compose
yml
# docker-compose-test.yml
services:
test-api:
image: test-api
container_name: test-api
build: .
restart: always
depends_on:
- test-mysql
env_file:
- .env.test
ports:
- '${HOST_APP_PORT}:${APP_PORT}'
links:
- test-mysql # 互联
test-mysql:
image: mysql:8.0
container_name: test-mysql
restart: always
volumes:
- /home/data/test-mysql:/var/lib/mysql
env_file:
- .env.test
ports:
- '${HOST_DB_MYSQL_PORT}:${DB_PORT}'
bash
# .env.test 文件
DB_HOST=test-mysql # 互联的容器
国内镜像地址
遇到问题
阿里云服务器 docker pull超时
您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
bash
$ mkdir -p /etc/docker # -p 确保目录名称存在,不存在的就建一个。
$ tee /etc/docker/daemon.json <<-'EOF' # tee命令用于读取标准输入的数据,并将其内容输出成文件。
{
"registry-mirrors": ["https://yox7rbt6.mirror.aliyuncs.com"]
}
EOF
$ systemctl daemon-reload
$ systemctl restart docker
DANGER
阿里加速 node 版本太低,docker官网pull不下来,找网上资源自己安装
bash
$ docker pull <网站镜像地址>
$ docker tag <旧镜像名>:<标签> <新镜像名>:<标签>
- 新旧镜像名称指向同一个镜像层(相同 IMAGE ID),实际磁盘空间不会翻倍,类似于文件系统的"硬链接"概念。
- 可以自由删除其中一个标签,不会影响另一个标签的使用。
- 通过 IMAGE ID 删除会移除所有关联标签
环境变量问题
在 docker-compose 中可以通过 env_file
定义使用的环境变量,但是此处定义的环境变量是用于 docker 容器内运行的。
无法用于在 docker-compose 文件中替换 image/ports 等内容,如果要定义 docker-compose 中的变量,可以有两种办法:
- 使用
.env
文件,不要加任何前后缀 - 执行
docker-compose
的时候指定参数--env-file
yml
docker-compose -f docker-compose.test.yml --env-file .env.test up -d --build test-api
# .env.test文件
HOST_APP_PORT=4000
APP_PORT=4000
# docker-compose.test.yml文件
ports:
- '${HOST_APP_PORT}:${APP_PORT}'
服务器卡死问题
yml
#docker-compose.test.yml 每个service 增加 limits
image: test-api
container_name: test-api
deploy:
resources:
limits:
cpus: '0.25'
memory: 100M
# 增加 --compatibility
docker-compose -f docker-compose.test.yml --env-file .env.test --compatibility up
执行问题
- 服务器不是用 root 用户登录,执行
docker-compose up
,提示权限不够 sudo docker-compose up
提示sudo: docker-compose:找不到命令
bash
$ whereis docker-compose
docker-compose: /usr/local/bin/docker-compose
# 那么问题就好解决了,直接复制一份过去完事
$ sudo cp -r /usr/local/bin/docker-compose /usr/bin/docker-compose