指南
Docker 是轻量级虚拟化技术,可以在原生操作系统上虚拟出多个容器(虚拟机)。同时,Docker 配套镜像机制,可以将容器中所有 程序和环境打包成“单一”文件,让软件的安装和运行无缝对接,彻底改变原来开发和运维工作的割裂问题。
场景
安装命令
如果您的服务器尚未安装 Docker,请使用如下命令安装它:
curl -fsSL https://get.docker.com -o get-docker.sh && sh get-docker.sh
curl -L "https://github.com/docker/compose/releases/download/1.29.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
ln -sf /usr/local/bin/docker-compose /usr/bin
sudo systemctl start docker
镜像仓库加速
如果从 Dockerhub 下载镜像镜像非常慢的话,就需要通过如下的方式修改仓库地址:
-
选择或获取你喜欢的国内镜像仓库(加速地址)
#1 Docker 中文社区https://registry.docker-cn.com#2 网易仓库http://hub-mirror.c.163.com#3 腾讯仓库https://mirror.ccs.tencentyun.com#4 阿里云仓库https://f53jxx8r.mirror.aliyuncs.com上述阿里云仓库加速地址仅供参考,建议登录控制台后,从后台获取获取
-
修改 /etc/docker/daemon.json 文件(如果没有可以增加),插入下值
{"registry-mirrors": ["https://f53jxx8r.mirror.aliyuncs.com"]} -
重启服务后生效
sudo systemctl daemon-reloadsudo systemctl restart docker -
Docker 支持配置多个仓库地址,类似:
{"registry-mirrors": ["https://registry.docker-cn.com","https://f53jxx8r.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"]}
远程 API 访问设置
Docker 服务提供了丰富的 API 接口,默认只能在本地以 socket 通讯方式访问 API。
curl --unix-socket /var/run/docker.sock http://docker/version
如果需添加远程访问 Docker API,需修改 Docker系统服务,然后在 ExecStart 这一行添加 -H tcp://0.0.0.0:2375
ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock -H tcp://0.0.0.0:2375
查看容器内部服务
虽然容器内无法使用 systemctl 命令,但是可以使用 service 命令查看和管理服务
# 查看所有服务状态
service --status-all
# 管理服务
service apache2 start | status | stop | restart
重置容器
cd /data/apps/appname
docker-compose down -v
docker-compose pull
docker-compose up -d
单容器升级
以正在运行的 MySQL 容器为例,如果没有持久化卷,容器的升级步骤:
#更新镜像
docker pull mysql
#停止容器
docker stop my-mysql-container
#删除容器
docker rm my-mysql-container
#重载容器
docker run --name=my-mysql-container --restart=always \
-e MYSQL_ROOT_PASSWORD=mypwd -v /my/data/dir:/var/lib/mysql -d mysql
多容器升级
如果使用的是 Docker-Compose 启动的多个容器,升级只需运行如下三条命令:
docker-compose down -v
docker-compose pull
docker-compose up -d
Docker-Compose 运行初始化命令
有三种运行个性化命令的方式:
- command 实现,例如:command: bundle exec thin -p 3000
- entrypoint 实现,例如:entrypoint: /code/entrypoint.sh
- 多容器共享数据卷实现
superset-init:image: *superset-imagecontainer_name: superset_initcommand: ["/app/docker/docker-init.sh"]env_file: docker/.env-non-devdepends_on: *superset-depends-onuser: "root"volumes: *superset-volumessuperset-worker:image: *superset-imagecontainer_name: superset_workercommand: ["/app/docker/docker-bootstrap.sh", "worker"]env_file: docker/.env-non-devrestart: unless-stoppeddepends_on: *superset-depends-onuser: "root"volumes: *superset-volumes
故障排除
容器应用无法远程访问?
导致这个问题的可能原因有三点:
- 端口没有正确映射到宿主机
- 容器内部拒绝远程访问
- 服务器安全组对应的端口没有开放
docker-containerd.socket: timeout?
请关闭 SELinux,如果 SELinux 开启会导致 docker 无法启动。
Windows 中 Docker 无法启动?
检查您的 Windows 是否安装了 360 之类的安全软件,如果有请卸载它。
参数
路径
Docker 根目录: /var/lib/docker
Docker 镜像目录: /var/lib/docker/image
Docker daemon.json 文件:默认没有创建,请到 /etc/docker 目录下根据需要自行创建
Portainer 数据卷:/var/lib/docker/volumes/portainer_data/_data
Docker 系统服务: /lib/systemd/system/docker.service
端口
需要设置 Docker API 的端口
版本
# Docker Version
docker -v
服务
使用由 Websoft9 提供的 Docker 部署方案,可能需要用到的服务如下:
Docker 系统服务
sudo systemctl start docker
sudo systemctl restart docker
sudo systemctl stop docker
sudo systemctl status docker
Docker-Compose 服务
#创建容器编排
sudo docker-compose up
#创建容器编排并重建有变化的容器
sudo docker-compose up -d
#启动/重启
sudo docker-compose start
sudo docker-compose stop
sudo docker-compose restart