常用版本

docker docker-compose

docker docker-compose 备注
20.10.9 1.23.1 nj201
19.03.13 1.23.1 aliyun
26.1.4 v2.27.1(docker自带) aliyun
20.10.24 v2.17.0 local-vm
26.0.0 v2.33.1 aliyun-test

what:是什么

一条命令快速创建服务(如mysql/redis)。

相对于虚拟机,docker具有快速创建/销毁、环境一致的优点。

how:怎么玩

快速安装(不建议)

sudo sh -c "$(curl -fsSL https://get.docker.com)"

安装(方式一)

https://docs.docker.com/install/linux/docker-ce/centos/

echo start to install docker and docker-compose...

sudo yum remove -y docker docker-ce docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
echo deleted
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# sudo yum list docker-ce --showduplicates

sudo yum install -y docker-ce

sudo systemctl enable docker
sudo systemctl start docker
sudo service docker restart
sudo docker run hello-world

安装(方式二)

sudo yum install -y wget
wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo -O /etc/yum.repos.d/docker-ce.repo

yum list docker-ce --showduplicates | sort -r

yum -y install docker-ce-18.06.1.ce-3.el7
# or  version 3:26.0.0-1.el7
# yum -y install docker-ce-26.0.0-1.el7

systemctl enable docker && systemctl start docker
docker --version

配置镜像加速

cat > /etc/docker/daemon.json << EOF
{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://b9pmyelo.mirror.aliyuncs.com", "https://9y52p56r.mirror.aliyuncs.com", "http://563f9b4c.m.daocloud.io", "https://9y52p56r.mirror.aliyuncs.com"]
}
EOF

systemctl restart docker
docker info

配置docker命令可被非root用户使用

sudo groupadd docker
sudo usermod -aG docker $USER
logout
docker run hello-world

暴露2375端口(非必需)

vim /lib/systemd/system/docker.service
找到 'ExecStart' in [Service] and append ' -H tcp://0.0.0.0:2375', eg: `ExecStart=/usr/bin/dockerd -H fd:// -H tcp://0.0.0.0:2375  --containerd=/run/containerd/containerd.sock`

使用testcontainers

https://java.testcontainers.org 创建测试中间件

docker-java操作docker

docker-java是一款操作docker的java库。

  • vi /lib/systemd/system/docker.service
  • Execstart=/usr/bin/dockerd后加上-H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 退出并且保存
  • 运行以下命令:
  • systemctl daemon-reload
  • service docker restart
  • systemctl status docker
  • netstat -nlp |grep 2375 可以查看2375是否已经被监听
  • 浏览器地址栏中访问:http://xxx.xxx.xxx.xxx:2375/info

docker-ui(非必需)

需要开启动2375端口

portainer is suggested!

docker run -d --name portainerUI -p 9000:9000 portainer/portainer

安装docker-compose

说明:自Docker Engine 20.10+起,docker自带了Docker Compose V2(基于 Go 重写):替代了旧的 docker-compose(Python 版本),使用docker compose version可以查看,若看到版本号则不需要执行如下操作。

特性 docker-compose(旧) docker compose(新)
命令形式 docker-compose(连字符) docker compose(空格)
编写语言 Python Go
安装方式 独立安装 Docker CLI 自带(V2)
维护状态 已停止新增功能,仅维护 官方推荐使用
使用体验 经典老版本 集成更紧,性能更佳,支持插件等
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.29.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/local/bin/doco
echo -e "\n" | sudo tee -a /etc/profile
echo -e "alias doco='docker-compose'" | sudo tee -a /etc/profile
. /etc/profile
doco --version
# method 2
# https://docs.docker.com/compose/install/standalone/
curl -SL https://github.com/docker/compose/releases/download/v2.33.1/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose

(注意版本,尽量去官网复制)
from https://docs.docker.com/compose/install/#install-compose

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose (官方速度会有点慢,使用国内daocloud可快速下载,sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.23.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose)
  • curl下载不了的话,可以去https://github.com/docker/compose/releases手工下载并上传到linux。

docker-compose.yml

https://docs.docker.com/compose/gettingstarted/

常见问题

在容器中编辑文件,但没有vi、vim、nano等编辑器

  • 将本机的文件复制到容器中, docker cp xxx.cfg 容器id或名称:绝对路径/xxx.cfg
  • 将容器的文件复制到本机中, docker cp 容器id或名称:/tmp/index.txt index2.txt

use centos7 in docker

docker run -d -p 5000:22 --name centos74 --privileged=true centos:latest /usr/sbin/init
docker exec -it centos74 /bin/bash

docker mysql 设置开机启动

restart: always

如何批量删除Docker中已经停止的容器

(https://blog.csdn.net/jiangeeq/article/details/79499324)

查看<none>容器

docker ps -a | grep "<none>"

清除<none>容器

docker rm $(docker ps -aq --filter "status=dead" --filter "status=exited" --filter "status=created")

清除<none>镜像

docker rmi $(docker images -f "dangling=true" -q)

#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,

sudo docker ps -a|grep Exited|awk ‘{print $1}’

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器

sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'`
  • 列举出网络 docker network ls
  • 删除网络 docker network rm xxxx
  • 查看容器的名称、ip、端口映射 docker inspect -f='{{.Name}} {{.NetworkSettings.IPAddress}} {{.HostConfig.PortBindings}}' $(docker ps -aq)
  • 查看容器的ip docker inspect CONTAINER_NAME | grep IPAddress
  • 删除REPOSITORY为<none>的镜像
docker image rm  `docker images |grep '<none>'|awk '{print $3}'`

查看镜像的Dockerfile

alias dfimage="docker run -v /var/run/docker.sock:/var/run/docker.sock --rm alpine/dfimage:1.1"
dfimage -sV=1.36 0bb0b19e383f > a.log

/etc/docker/daemon.json文件内容中多一个,导致docker启动不了

{
  "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","https://xxx.mirror.aliyuncs.com", ]
}

docker volume operation

docker volume ls/create/inspect/rm

backup

docker run –rm –volumes-from docker-nexus3_nexus3_1_be78625a2c9d -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /nexus-data

restore

$ docker run –rm –volumes-from DOCKER_CONTAINER_NAME -v $(pwd):/backup ubuntu bash -c “tar xvf /backup/backup.tar -C /nexus-data –strip 1”

镜像

拉取镜像 docker pull maven:3.6.3-openjdk-8-slim
删除镜像 docker rmi maven:3.6.3-openjdk-8-slim

导入导出

镜像导入导出

镜像导入导出不影响镜像名称与tag

docker images
# 导出镜像,docker save 镜像name:tagimageId > xxx.tar

docker save java:8 > java_8.tar

# 导出多个镜像成一个文件
docker save -o image_all.tar elasticsearch:8 kibana:5.5

# 载入镜像
docker load < java_8.tar

容器导入导出

docker ps
# 把容器导出成文件
docker export 34d2b74c7a0b > mysql57.tar

日志与清理

docker容器日志一般在/var/lib/docker/containers/目录下,可执行find /var/lib/docker/containers/ -name *-json.log |xargs du -sh查看日志文件大小。

清空容器日志时不能使用rm删除,要使用“写覆盖”的方式。清空所有容器日志的脚本。

#!/bin/sh
# filename: clean_dockerlog.sh
# logs后面不能有空格
logs=`find /var/lib/docker/containers/ -name \*-json.log`

for docker_log in $logs
    do
        echo " " > $docker_log
    done

docker占用自盘空间查看和清理

  • 查看docker占用的磁盘空间 docker system df
  • 清理docker使用的磁盘空间(Docker提供了docker system prune,可以用于清理dangling镜像和容器,以及失效的数据卷和网络) docker system prune

常用docker

容器 版本 大小
easysoft/zentao 12.5.2 647MB
openjdk 8-jdk-slim 288MB
openjdk 8-jre-slim 187MB
openjdk 8u275-slim 288MB
openjdk 8-jre-alpine 84.9MB
openjdk 8-jdk-alpine 105MB

常见说明

挂载点说明

docker-compose.yml中的volumes节点中/opt/docker_data/vsftpd:/home/vsftpd:rw,左边是宿主机目录,右边是容器目录,:rw是权限,可不写

查看docker窗口占用内存

docker stats --no-stream

查看docker所有映射到宿主机的端口

docker ps -a --format "table {{.Names}}\t{{.Ports}}"

该命令将显示所有正在运行的容器的名称和它们所映射的端口信息。

如果您只想查看正在运行的容器的端口映射信息,可以省略 -a 参数:

docker ps --format "table {{.Names}}\t{{.Ports}}"

输出中的 PORTS 列会显示容器的端口映射信息。例如,0.0.0.0:8080->80/tcp 表示容器的端口 80 映射到宿主机的端口 8080。

容器无法使用ping/telnet/curl/wget等命令时

docker run --rm -it --network container:<your-container-id> curlimages/curl sh

然后执行telnet/curl/wget

关联文档

centos7服务器清理磁盘空间

作者:张三  创建时间:2022-04-18 20:13
最后编辑:张三  更新时间:2025-11-28 10:10