Docker常用命令

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	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值