Docker-容器操作
Posted guardwhy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker-容器操作相关的知识,希望对你有一定的参考价值。
1.1 查看容器
1、查看最后一次运行的容器
docker ps -l
2、查看运行容器
docker ps
3、查看所有容器
docker ps -a
4、进入容器,其中字符串为容器ID
docker exec -it ecc704d85084 /bin/bash
5、停用全部运行中的容器
docker stop $(docker ps -q)
6、删除全部容器
docker rm $(docker ps -aq)
7、一条命令实现停用并删除容器
docker stop $(docker ps -q) & docker rm $(docker ps -aq)
8、查看容器的ip地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器ID
1.2 创建容器
1、创建容器命令:docker run
案例说明: docker run -di --name myredis2 -p 6666:6379 redis
-i:表示运行容器
-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name :为创建的容器命名。
-v:表示目录映射关系(前者是宿主机目录,后者是映射到容器上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
2、交互式方式创建容器(创建以后就进入到容器内部了)
基本语法: docker run -it --name=容器名称 镜像名称:标签 /bin/bash
通过ps命令查看,发现可以看到启动的容器,状态为启动状态
3、守护式方式创建容器
基本语法: docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
1.3 启动、停止、删除容器
1、停止容器
docker stop 容器名称(或者容器ID)
docker stop 容器名称(或者容器ID),容器名称(或者容器ID)
2、重启容器
docker restart 容器名称(或者容器ID)
docker restart 容器名称(或者容器ID),容器名称(或者容器ID)
3、启动容器
docker start 容器名称(或者容器ID)
docker start 容器名称(或者容器ID)容器名称(或者容器ID)
注意事项: 出现如下类似错误
COMMAND_FAILED: '/sbin/iptables -t nat -A DOCKER -p tcp -d 0/0 --dport 8111 -j DNAT --to-destination 172.17.0.6:8111 ! -i docker0' failed: iptables: No chain/target/match by that name.
如果启动容器出错,把网卡重新设置如下:
pkill docker
iptables -t nat -F
ifconfig docker0 down
brctl delbr docker0
systemctl start docker
-- 重启docker后解决
4、删除容器
注意事项: 如果删除一个容器,必须这个容器是停止状态,然后删除,也就说你无法删除一个运行中的容器。
docker rm 容器名称(或者容器ID)
docker rm 容器名称(或者容器ID) 容器名称(或者容器ID)
docker rm -f $(docker ps -aq) # 删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
1.4 退出容器
exit #直接容器停止并且退出
Ctrl + p + Q #容器不停止退出
1.5 查询启动日志
docker logs -f -t --tail 容器id(容器名字)
# 显示日志
-tf #显示日志
--tail number #要显示日志条数
1.6 查询进程信息
# 基本命令
docker top 容器id
1.7 查看容器元数据
# 命令
docker inspect 容器id
查看结果
# 测试
[root@Linux ~]# docker inspect 76add8b5c428
[
{
# 完整的id,有意思啊,这里上面的容器id,就是截取的这个id前几位!
"Id": "76add8b5c428721e78f270f1cb963e50d170d891da8631965602279fbf868a1b",
"Created": "2021-06-07T02:46:39.211261839Z",
"Path": "docker-entrypoint.sh",
"Args": [
"redis-server",
"/usr/local/etc/redis/redis.conf"
],
# 状态
"State": {
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 4680,
"ExitCode": 0,
"Error": "",
"StartedAt": "2021-06-07T02:46:40.188362039Z",
"FinishedAt": "0001-01-01T00:00:00Z"
},
// ...........
]
1.8 进入正在运行的容器
方式一: docker exec -it 容器id bashShell
docker exec -it 76add8b5c428 /bin/bash
方式二:docker attach 容器id
docker attach 76add8b5c428
两种方式区别:
exec 是在容器中打开新的终端,并且可以启动新的进程。
attach 直接进入容器启动命令的终端,不会启动新的进程。
1.9 拷贝文件
1、从容器内拷贝文件到主机上: docker cp 容器id:容器内路径 目的主机路径
## 进入docker容器内部
[root@Linux ~]# docker exec -it c219f694d74d /bin/bash
[root@c219f694d74d /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@c219f694d74d /]# cd /home/
[root@c219f694d74d home]# ls
# 在容器内创建一个文件
spring.java
[root@c219f694d74d home]# exit
exit
# 将这文件拷贝出到主机上
[root@Linux ~]# docker cp c219f694d74d:/home/spring.java /home
[root@Linux ~]# cd /home/
[root@Linux home]# ls
abc.log abc.txt guardwhy james Java mycal my.sh spring.java
[root@Linux home]#
1.10 可视化窗口
1、Portainer是Docker的图形化管理工具,提供状态显示面板、应用模板快速部署、容器镜像网络数据卷的基本操作(包括上传下载镜像,创建容器等操作)、事件日志显示、容器控制台操作、Swarm集群和服务等集中管理和操作、登录用户管理和控制等功能。功能十分全面,基本能满足中小型单位对容器管理的全部需求。如果仅有一个docker宿主机,则可使用单机版运行,Portainer单机版运行十分简单,只需要一条语句即可启动容器,来管理该机器上的docker镜像、容器等数据。
docker run -d -p 8088:9000 \\
--restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
2、开启8088:9000端口,打开防火墙。
firewall-cmd --zone=public --add-port=8000/tcp --permanent
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
3、查看所有开启的端口
firewall-cmd --list-ports
4、访问方式: http://192.168.50.128:8088/
5、首次登陆需要注册用户,给guardwhy
用户设置密码。
6、单机版这里选择local
即可,选择完毕,点击Connect
即可连接到本地docker
7、登录成功,查看结果!!!
以上是关于Docker-容器操作的主要内容,如果未能解决你的问题,请参考以下文章