【Docker项目】之–Docker、Docker-compose的安装、更新和卸载
#教程 #工具 #手册 #Linux #Docker #Docker-compose #Ubuntu
Docker
是一个开源项目,允许开发者将一个基础的运行环境及软件打包为镜像,快速的交付给用户使用,Docker Compose
是Docker
官方编排Orchestration
项目之一,负责快速的部署应用。
Docker:https://docs.docker.com/desktop/install/linux-install
Docker-compose:https://github.com/docker/compose
下面安装,以ubuntu系统为例,其他系统可参考。
1. 安装及卸载
登录root用户,更新源及安装工具
sudo -i
apt-get update && apt-get install -y wget vim
1.1. 国内服务器
1.1.1. 安装docker
curl -sSL https://get.daocloud.io/docker | sh
1.1.2. 安装docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/v2.6.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.6.0为安装版本,可以登录Release · docker/compose · GitHub查询。
1.1.3. 卸载docker
apt-get remove docker docker-engine
rm -fr /var/lib/docker/
1.1.4. 卸载Docker-compose
rm /usr/local/bin/docker-compose
1.2. 国外服务器
1.2.1. 安装Docker
wget -qO- get.docker.com | bash
1.2.2. 安装Docker-compose
curl -L "https://github.com/docker/compose/releases/download/v2.6.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
2.6.0为安装版本,可以登录Release · docker/compose · GitHub查询。
1.2.3. 卸载Docker
apt-get purge docker-ce docker-ce-cli containerd.io
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
1.2.4. 卸载Docker-compose
rm /usr/local/bin/docker-compose
2. 常用命令
2.1. 启动Docker服务
# 启动Docker,将Docker服务加入开机自启动
systemctl enable --now docker
# 查看 Docker 运行状态
systemctl status docker
# 查看docker、docker-compose版本
docker version
docker-compose version
2.2. Docker
# 运行Docker映像,-d用于创建守护程序进程。
docker run -d image-name
# 查看可用的Docker映像
docker images
# 查看最近的运行容器,-l它用于显示最新的可用容器。
docker ps -l
# 查看所有正在运行的容器,-a它用于显示所有可用的容器。
docker ps -a
# 停止运行容器,container_id由Docker分配给容器的id。
docker stop container_id
# 删除容器,-f强制删除。
docker rm -f container_id
# 删除一个映像
docker rmi image-name
# 删除所有映像
docker rmi $(docker images -q)
# 强制删除所有映像,-r用于强制删除映像。
docker rmi -r $(docker images -q)
# 删除所有容器
docker rm $(docker ps -a -q)
# 进入Docker容器
docker exec -it container-id bash
# 创建一个名为net_name的docker子网。
docker network create net_name
# 删除一个名为net_name的docker子网。
docker network rm net_name
# 查看docker网络
docker network ls
# 查看docker占用磁盘信息
docker system df
# 删除所有未被tag标记和未被容器使用的镜像,-a删除所有未被容器使用的镜像
docker image prune
# 删除所有停止运行的容器
docker container prune
# 删除所有未被挂载的卷
docker volume prune
# 删除所有网络
docker network prune
# 删除docker所有资源
docker system prune
2.3. Docker-Compose
# 通过默认docker-compose.yml文件创建docker容器,-d在后台运行服务容器。
docker-compose up -d
# 根据指定模板创建docker容器,-f指定使用的Compose模板文件,默认为docker-compose.yml,可以多次指定。
docker-compose -f docker-compose.yml up -d
# 列出项目中所有容器
docker-compose ps
# 停止正在运行的容器
docker-compose stop
# 启动已经存在的服务容器。
docker-compose start
# 重启项目中的服务。
docker-compose restart
# 查看帮助
docker-compose -h
# 停止和删除容器、网络、卷、镜像。
docker-compose down
# 查看服务容器的输出
docker-compose logs
# 构建(重新构建)项目中的服务容器。
docker-compose build
# 拉取服务依赖的镜像。
docker-compose pull
# 删除所有(停止状态的)服务容器,推荐先执行docker-compose stop命令来停止容器。
# –f强制直接删除,包括非停止状态的容器,-v删除容器所挂载的数据卷。
docker-compose rm
# 在指定服务上执行一个命令,执行一个ping命令。
docker-compose run ubuntu ping www.baidu.com
# 暂停一个服务容器
docker-compose pause
# 恢复处于暂停状态中的服务。
docker-compose unpause
# 验证并查看compose文件配置。
docker-compose config
# 显示某个容器端口所映射的公共端口。
docker-compose port
3. 容器更新
3.1. Docker方式
通过Docker直接运行的容器,需要先停止原有容器,备份数据,删除容器,拉去最新容器,运行,以alist
为例。
# 停止容器
docker stop alist
# 备份数据(正常情况下,是不会删除)。
cp -r ~/docker_data/alist ~/alist.archive
# 删除容器
docker rm -f alist
# 拉取新版2.6.1镜像,也可以使用latest,即最新镜像
docker pull xhofe/alist:2.6.1
# 重新运行
docker run -d --restart=always -v ~/docker_data/alist:/opt/alist/data -p 8968:5244 --name="alist" xhofe/alist:2.6.1
# 清理旧镜像
docker image prune
3.2. Docker-compose方式
# 进入存放docker-compose.yml文件夹,停止容器
docker-compose stop
# 备份数据,注意备份数据的大小。比如我的navidrome备份的数据里面包含60GB+的歌曲,服务器硬盘是没有这么多空间的。
cp -r ~/docker_data/navidrome navidrome.archive
# 修改docker-compose.yml文件内镜像版本,如果没有默认就是latest)
vim docker-compose.yml
# 删除原容器
docker-compose down
# 拉去最新镜像
docker-compose pull
# 重新运行
docker-compose up -d #完成
# 清理旧镜像
docker image prune
4. 其他
4.1. 配置Docker国内镜像源,加速Docker部署
sudo vim /etc/docker/daemon.json
添加下列内容
{
"registry-mirrors": [
"https://registry.docker-cn.com",
"https://docker.mirrors.ustc.edu.cn"
]
}
重新加载配置
systemctl daemon-reload
systemctl restart docker
查看是否生效
docker info
4.2. 不同compose之间网络通讯
当一个compose运行的时候会建立一个default的网络,文件内的每个容器都会加入该网络中。这样,容器就可被该网络中的其他容器访问,该容器还能以服务名称作为hostname被其他容器访问。但是通常我们会根据构建更新的频率、业务领域等条件划分不同的compose文件,而且这些不同的compose的容器之间默认是不支持互相通讯的。那么就需要构建一些公共的网络,然后这些所有的需要相互通讯的容器都加入这个公共网络即可完成通讯。构建公共网络:
docker network create mynet
内部的容器,可以使用下列两种方法连接在这个网络
- 定义内部网络与外部网络连接
version: '3'
services:
……
networks:
- appnet
networks:
app_net:
external:
name: mynet
- 定义网络属性查找外部网络加入
version: '3'
services:
……
networks:
- mynet
networks:
mynet:
external: true
4.3. 解决Docker日志过大问题
Docker 日志一般存储在/var/lib/docker/containers/<container_id>
下,文件名为<container_id>-json.log
,Docker中的日志全部由这个文件负责记录,如果业务量大的话,这个文件大小增长会非常快,若在其他地方记录业务日志的话,那么这个Docker日志可以控制它的体积。
方法一:
version: '3'
services:
……
logging:
driver: "json-file"
options:
max-size: "1g"
docker-compose.yml
限制日志大小为 1GB,yml文件中version
的版本不能过低。
补充:若想关闭 docker 中的日志,使之不生成 log 文件,则配置如下:
version: '3'
services:
……
logging:
driver: "none"
或者在 docker run
命令中加上 -log-driver=none
参数即可
方法二:
在 /etc/docker/daemon.json
文件中添加关于日志的参数(无此文件的可以新建):
{
"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"],
"log-driver": "json-file",
"log-opts": {
"max-size": "1m",
"max-file": "1"
}
}
因为我在其他地方记录了业务日志,所以 docker 中的日志就尽量设置小一点,我设置了最大文件大小为 1MB,文件数量为 1 个。
设置之后重启 docker 服务:
systemctl daemon-reload
systemctl restart docker
评论区