Docker常用命令
安装Docker
安装 Docker
# yum install docker
安装指定版本 Docker
查看相应版本
# yum list docker --showduplicates | sort -r
#查询结果
docker.x86_64 2:1.13.1-208.git7d71120.el7_9 extras
docker.x86_64 2:1.13.1-206.git7d71120.el7_9 extras
docker.x86_64 2:1.13.1-205.git7d71120.el7.centos extras
docker.x86_64 2:1.13.1-204.git0be3e21.el7 extras
docker.x86_64 2:1.13.1-203.git0be3e21.el7.centos extras
docker.x86_64 2:1.13.1-162.git64e9980.el7.centos extras
docker.x86_64 2:1.13.1-161.git64e9980.el7_8 extras
CentOS 指定版本安装
# yum install docker-1.13.1-205.git7d71120.el7.centos
Ubuntu 安装:
# 更新 apt-get
apt-get update
# 安装 Docker
sudo apt-get install -y docker.io
安装 Docker-CE
参考阿里云安装教程:
https://developer.aliyun.com/mirror/docker-ce
配置阿里云镜像加速
配置镜像地址
# vim /etc/docker/daemon.json
{
"dns": ["8.8.8.8", "8.8.4.4"],
"registry-mirrors": [
"https://docker.m.daocloud.io/",
"https://huecker.io/",
"https://dockerhub.timeweb.cloud",
"https://noohub.ru/",
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn",
"https://xx4bwyg2.mirror.aliyuncs.com",
"http://f1361db2.m.daocloud.io",
"https://registry.docker-cn.com",
"http://hub-mirror.c.163.com"
],
"runtimes": {
"nvidia": {
"path": "nvidia-container-runtime",
"runtimeArgs": []
}
}
}
https://xxxxxx.mirror.aliyuncs.com 为阿里云镜像地址,
使用该页面查看
https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
下载时直接指定镜像地址:
docker pull mirror.ccs.tencentyun.com/library/redis:latest
刷新配置
systemctl daemon-reload
重启Docker
systemctl restart docker
帮助命令
查看版本号
# docker version
查看详细信息
# docker info
帮助命令
# docker --help
镜像命令
查询镜像
# docker search tomcat
查询 Star 大于50的镜像
# docker search -s 50 tomcat
拉取 Tomcat 最新版
# docker pull tomcat
拉取 Tomcat 8.5 版本
# docker pull tomcat:8.5
查看镜像列表
# docker images
删除 Tomcat 最新版 镜像
# docker rmi tomcat
删除 Tomcat 8.5 版本 镜像
# docker rmi tomcat:8.5
强制删除 Tomcat 8.5 版本 镜像 (镜像运行时删除)
# docker rmi -f tomcat:8.5
强制删除多个镜像
# docker rmi -f tomcat:8.5 nginx:1.17.3
强制删除全部镜像
# docker rmi -f $(docker images -qa)
容器命令
容器运行命令( run ) 参数详解
--name : 容器名称
-d : 后台运行
-i : 交互模式运行容器, 常与 -t 同时使用
-t : 为容器重新分配一个伪输入终端, 常与 -i 同时使用
-p : 指定端口映射, 有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort
-P : 随机端口映射
运行 交互式 容器
# docker run --name mycentos -it centos
列出正在运行的容器
# docker ps
列出当前所有正在运行的容器 + 历史运行过的容器
# docker ps -a
列出最近创建的容器
# docker ps -l
列出最近创建的 5 个容器
# docker ps -n 5
只显示容器编号
# docker ps -nq 5
启动运行过的容器
# docker start 667ae6cb6e2c (容器ID)
# docker start mycontos (容器名称)
关闭运行的容器
# docker stop 667ae6cb6e2c (容器ID)
# docker stop mycontos (容器名称)
强制关闭 ( kill ) 运行的容器
# docker kill 667ae6cb6e2c (容器ID)
# docker kill mycontos (容器名称)
删除容器
# docker rm 667ae6cb6e2c (容器ID)
# docker rm mycontos (容器名称)
强制删除运行中的容器
# docker rm -f 667ae6cb6e2c (容器ID)
# docker rm -f mycontos (容器名称)
强制删除所有容器
# docker rm -f $(docker ps -a -q)
查看容器内运行的进程
# docker top 667ae6cb6e2c (容器ID)
重新进入到容器
# docker attach 667ae6cb6e2c (容器ID)
# docker exec -it 667ae6cb6e2c /bin/bash ( 效果和上面一样. 但 exec 比 attach 强大 )
让容器执行命令并返回执行结果(不进入容器)
# docker exec -t 667ae6cb6e2c ls ( 在容器 667ae6cb6e2c 里执行 ls 命令, 并返回结果 )
从容器内拷贝文件到宿主机上
# docker cp 667ae6cb6e2c:/tmp/abc.txt /home
667ae6cb6e2c ( 容器ID ) :/tmp/abc.txt ( 容器内文件地址 ) /home ( 宿主机目录 )
提交修改过的容器
# docker commit -a=“作者” -m=“提交信息” 717d22ad96be brando/tomcat-8.5:8.5
brando/tomcat-8.5 ( 命名空间/容器名称 ) :8.5 ( tag 通常为版本号 )
容器数据卷
运行时添加容器数据卷
# docker run -it -v /HostVolume:/ContainerVolume centos
/HostVolume ( 宿主机目录地址 )
/ContainerVolume ( 容器目录地址 )
运行时添加容器只读数据卷(宿主机不只读, 容器只读)
# docker run -it -v /HostVolume:/ContainerVolume:ro centos
/HostVolume ( 宿主机目录地址 )
/ContainerVolume ( 容器目录地址 )
:ro ( read-only 只读 )
常见问题
运行Docker命令时出现出现错误.
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
造成原因可能是Docker没有正常启动
# sudo service docker restart
关闭Docker时出现出现错误
Warning: Stopping docker.service, but it can still be activated by:
docker.socket
# systemctl stop docker.socket
# systemctl stop docker.service
其他常用命令
服务启动
# systemctl start docker
服务关闭
# systemctl stop docker
//上面的命令报错就执行下面的命令
# systemctl stop docker.socket
# systemctl stop docker.service
服务启动并设置开机启动
# systemctl enable docker && systemctl start docker
卸载Docker
# yum remove -y docker*
卸载Docker-CE
# yum remove -y docker-ce*
查看日志
查看最后100行日志:
# docker logs -t --tail 100 667ae6cb6e2c (容器ID)
查看最后5分钟日志:
# docker logs -t --since 5m 667ae6cb6e2c (容器ID)
查看容器所占日志文件大小
for d in $(ls -d /var/lib/docker/containers/*); do ls --time-style=long-iso -lh $d/*-json.log | awk -F' *|/' '{printf("%30s\t%s\t%s %s\t%s\n", "'$(docker ps -af id=${d##*/} --format "table {{.Names}}" | tail -1)'", $5, $6, $7, $14) }'; done
安装使用-Tomcat
1. 拉取 tomcat:8.5
> docker pull tomcat:8.5
2. 查看拉取的文件
> docker images
3. 创建挂载目录
> mkdir -p /alidata/server/tomcat8.5
4. 最简单方式运行
#最简单方式, 直接使用默认配置, 项目war包直接放入webapps目录:
> docker run -d -p 80:8080 --name atomic-website-tomcat
-v /alidata/server/tomcat8.5/logs:/usr/local/tomcat/logs
-v /alidata/server/tomcat8.5/webapps:/usr/local/tomcat/webapps
--privileged=true tomcat:8.5
5. 自定义, 多项目方式. (不推荐)
(1). 运行 tomcat 容器 80 为服务器端口, 8080 为容器端口
> docker run -d -p 80:8080 --name BrandoTomcat8.5 tomcat:8.5
(3). 查看正在运行的容器
> docker ps
(4). 进入容器复制出配置文件目录
> docker cp 2bec85dd01d7:/usr/local/tomcat/conf /alidata/server/tomcat8.5/conf
(5). 进入tomcat容器, 删除 tomcat 自带的文档.
> docker exec -it 2bec85dd01d7 /bin/bash
> cd /usr/local/tomcat/webapps/
> rm -rf *
> exit
(6). 提交修改内容, 生成新的镜像.
> docker commit -a="BrandLv" -m="Delete Doc Tomcat" 2bec85dd01d7 brando/tomcat:8.5
(7). 删除当前运行的容器.
> docker rm -f 2bec85dd01d7
(8). 重新运行容器并挂载响应的目录, 配置文件目录, 日志目录, war目录, www目录
> docker run -d -p 80:8080 --name BrandoTomcat8.5
-v /alidata/server/tomcat8.5/conf:/usr/local/tomcat/conf
-v /alidata/server/tomcat8.5/logs:/usr/local/tomcat/logs
-v /alidata/server/tomcat8.5/war:/usr/local/tomcat/war
-v /alidata/server/tomcat8.5/www:/usr/local/tomcat/www
--privileged=true brando/tomcat:8.5
#其他配置自行修改.
运行Jar包项目
1. 拉取 java 8
> docker pull openjdk:8u322
2. 运行 eureka 服务
> docker run -d -p 7001:7001 --name eureka-server --net=host
-v /alidata/server/docker/cloud-parent/eureka-server/eureka-server.jar:/usr/eureka-server.jar
--privileged=true openjdk:8u322
java -jar -Duser.timezone=GMT+08 /usr/eureka-server.jar
--spring.profiles.active=test
3. 参数说明:
--net=host 容器公用主机HOST, 不然容器和容器之间IP不通.
--privileged=true 真正获得root权限
-Duser.timezone=GMT+08 设置时区
--spring.profiles.active=test 指定test配置文件
使用Journal查询Docker日志
#按项目查
xxxx 为 容器ID(项目名称)
#查看最后 100 行日志.
journalctl CONTAINER_NAME=xxxx -n 100
#查看今天的日志.
journalctl CONTAINER_NAME=xxxx --since today
#查看昨天的日志.
journalctl CONTAINER_NAME=xxxx --since yesterday
#查看20分钟前的日志.
journalctl CONTAINER_NAME=xxxx --since "20 min ago"
#查看指定日期区间的日志.
journalctl CONTAINER_NAME=xxxx --since "2021-03-15" --until "2021-03-16"
#查看指定时间区间的日志.
journalctl CONTAINER_NAME=xxxx --since "2021-03-15 08:00:00" --until "2021-03-15 09:00:00"
#查看最后100条日志.
journalctl CONTAINER_NAME=xxxx -n 100
#实时打印日志.
journalctl CONTAINER_NAME=xxxx -f
#按日志等级查询日志,
# 0: emerg, 1: alert, 2: crit, 3: err, 4: warning, 5: notice, 6: info, 7: debug
journalctl CONTAINER_NAME=xxxx -p [日志等级]
journalctl CONTAINER_NAME=xxxx -p err --since "2021-03-15"
#显示所有系统日志占据的硬盘空间
journalctl --disk-usage
#指定日志文件占据的最大空间
journalctl --vacuum-size=1G
#指定日志文件保存多久
journalctl --vacuum-time=1years

4万+

被折叠的 条评论
为什么被折叠?



