常用版本
docker docker-compose
| docker | docker-compose | 备注 |
|---|---|---|
| 20.10.9 | 1.23.1 | nj201 |
| 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/initdocker 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:tag或imageId > 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
donedocker占用自盘空间查看和清理
- 查看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关联文档
最后编辑:张三 更新时间:2025-11-28 10:10