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、登录成功,查看结果!!!

原文地址:https://www.cnblogs.com/Guard9/p/14906562.html