云原生容器化-5 Docker常见操作命令

1.登录和退出docker仓库

使用docker login和docker logout分别用于登录和退出docker仓库。

shell 复制代码
#登录时携带用户名、密码、仓库地址信息
docker login --username test  --password test@123 192.168.0.22:8000
docker login --username seong --password 3er4#ER$ 192.168.0.22:8000

#注销时需要仓库信息
docker logout 192.168.0.22:8000

2.镜像相关

2.1 查看镜像列表

使用docker images 查看本地docker镜像列表:

shell 复制代码
[root@VM-4-6-centos ~]# docker images | grep httpd
httpd          beta2           559eaf86a53b     6 hours ago       167MB
httpd          latest          59bcd61b45fd     3 weeks ago       167MB

2.2 生成镜像

通过docker build可以根据Dockerfile生成docker镜像

shell 复制代码
docker build -t ${镜像名称:版本号} -f ${Dockerfile路径}  ${构建上下文路径}

2.3 搜索、下拉和推送镜像

使用docker search 从远程仓库根据名称搜索镜像:

shell 复制代码
#从docker仓库搜索名称与httpd相关的镜像
docker search httpd

使用docker pull 从远程仓库下载镜像:

shell 复制代码
[root@VM-4-6-centos ~]# docker pull httpd
Using default tag: latest
latest: Pulling from library/httpd
Digest: sha256:5ee9ec089bab71ffcb85734e2f7018171bcb2d6707f402779d3f5b28190bb1af
Status: Image is up to date for httpd:latest
docker.io/library/httpd:latest

不携带版本号时,默认下载latest版本。

使用docker push 向仓库推送镜像:

shell 复制代码
docker push ${仓库地址}/${镜像名:版本号}
shell 复制代码
[root@VM-4-6-centos ~]# docker push 192.168.0.22:8000/httpd
Using default tag: latest
The push refers to repository [192.168.0.22:8000/httpd]
ab3a0403a0d9: Pushed
40a428a249db: Pushed
24bd64e09119: Pushed
5f70bf18a086: Layer already exists
c3147eaa9536: Pushed
fb1bd2fc5282: Pushed
latest: digest: sha256:77f8ee2103ca1320c2db50ece65451fe42b662c420fa876f55ce2325d675a886 size: 1572

2.4 镜像标签

使用docker tag对镜像打标签:

shell 复制代码
[root@VM-4-6-centos ~]# docker tag httpd httpd:beta-1

[root@VM-4-6-centos ~]# docker images | grep httpd
httpd        beta-1             59bcd61b45fd   3 weeks ago     167MB
httpd        latest             59bcd61b45fd   3 weeks ago     167MB

在向本地仓库推送镜像时,也需要使用docker tag给镜像打上仓库地址标签:

shell 复制代码
[root@VM-4-6-centos ~]# docker tag httpd 192.168.0.22:8000/httpd
[root@VM-4-6-centos ~]# docker images | grep httpd
192.168.0.22:8000/httpd         latest             59bcd61b45fd   3 weeks ago     167MB
httpd                             beta-1             59bcd61b45fd   3 weeks ago     167MB
httpd                             latest             59bcd61b45fd   3 weeks ago     167MB

2.5 删除镜像

使用docker rmi删除镜像

shell 复制代码
[root@VM-4-6-centos ~]# docker rmi httpd:beta-1
Untagged: httpd:beta-1
[root@VM-4-6-centos ~]# docker images | grep httpd
192.168.0.22:8000/httpd         latest             59bcd61b45fd   3 weeks ago     167MB
httpd                             latest             59bcd61b45fd   3 weeks ago     167MB

注意:只有对应容器的镜像才可以被删除。

2.6 查看镜像详情

使用docker inspect查看详情, 使用方式:

shell 复制代码
docker inspect ${镜像ID或者镜像名}

3.容器相关

3.1 查看容器

docker ps 查看正在运行的容器,docker ps -a查询所有容器(包含已停止运行的容器):

shell 复制代码
[root@VM-4-6-centos ~]#  docker ps -a | grep httpd | awk '{print $1, $7, $11, $12}'
32df086f7430 Exited ago seong-http
b3cb2c7282bf Up seong-http-beta2

[root@VM-4-6-centos ~]# docker ps | grep httpd | awk '{print $1, $7, $11, $12}'
b3cb2c7282bf Up seong-http-beta2

Exited表示容器已经停止运行,Up表示容器正在运行。

3.2 运行容器

shell 复制代码
docker run 
-d 
--name ${容器name} 
-p ${宿主机端口:容器端口} 
-v ${宿主机路径:容器路径} 
${镜像名}
${启动命令}

-p用于添加宿主机与容器的端口映射关系,多个端口映射时,需要使用多个-p进行标注;

-v用于在宿主机和容器之间挂载文件系统,多个挂载卷时,需要使用多个-v进行标注。

-d 表示在后台运行;

--name 为容器指定名称,否则会随机生成。

3.3 启动、停止、删除容器

shell 复制代码
#启停容器
docker stop ${容器ID/容器name}
docker start ${容器ID/容器name}
docker restart ${容器ID/容器name}

#删除容器
docker rm ${容器ID/容器name}

注意:镜像可以被删除的前提条件是对应的容器都处于停止状态。

3.4 进入容器

shell 复制代码
docker exec -it ${容器ID/容器name} ${sh或者bash}

也可通过docker attach进入容器中,但attach进入的是容器启动命令的终端。

3.5 将容器保存为镜像

shell 复制代码
docker commit ${容器ID/容器name} ${镜像名:版本号}

相对于docker commit命令,更推荐使用Dockerfile创建镜像,可参考:云原生容器化-3 Dockerfile

3.6 查询容器详情

shell 复制代码
docker inspect  ${容器ID/容器name}

返回一个JSON格式对象,包含容器的ID、IP地址和网关、端口映射、挂载卷等详细信息。

如下所示为docker inspect命令的执行结果,省去部分信息后如下:

json 复制代码
[
    {
    	// 容器的id、名称、创建时间、状态、使用的镜像ID
        "Id": "2cab8a45e739c9ec68e9f202d937742b26ba5c2d8c9278a0f259f390215af2c4",
        "Name": "/test_aiws_demo",
        "Created": "2024-02-15T03:33:32.853593119Z",
        "State": {
            "Status": "running"
        },
        "Image": "sha256:e2c0e7ac74ac85436be147a5fc022fd6294e8c27c025c258c58f556641e6535e",
        
        //日志路径,通过docker logs查看的就是该日志文件
        "LogPath": "/var/lib/docker/containers/2cab8a45e739c9ec68e9f202d937742b26ba5c2d8c9278a0f259f390215af2c4/2cab8a45e739c9ec68e9f202d937742b26ba5c2d8c9278a0f259f390215af2c4-json.log",
        
        // 文件系统驱动使用overlay2
        "Driver": "overlay2",

		// 挂载信息:宿主机的/usr/local/aiws/logs目录关联容器的/usr/local/app/logs目录
        "Mounts": [
            {
                "Type": "bind",
                "Source": "/usr/local/aiws/logs",
                "Destination": "/usr/local/app/logs",
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],
        
        // 容器的配置信息
        "Config": {
            "Image": "124.221.127.40:5000/traffic/aiws_image_seong:1.0",
            // 容器的工作目录,进入容器后,直接进入该目录
            "WorkingDir": "/usr/local/app"
        },
        
		// 容器的网络信息
        "NetworkSettings": {
            "Ports": {
            	// 容器的8001端口映射到宿主机的8888端口
                "8888/tcp": [
                    {
                        "HostIp": "0.0.0.0",
                        "HostPort": "8001"
                    },
                    {
                        "HostIp": "::",
                        "HostPort": "8001"
                    }
                ]
            },
            // 容器的IP、MAC和网关
            "Gateway": "172.17.0.1",
            "IPAddress": "172.17.0.6",
            "MacAddress": "02:42:ac:11:00:06",
        }
    }
]

3.7 查看容器日志

shell 复制代码
#查看docker日志
docker logs  ${容器ID/容器name}

#追踪docker日志,效果如同 tail -f
docker logs -f ${容器ID/容器name}

docker logs得到的是该容器的标准输出和标准错误,日志记录在宿主机的某个路径下,可以通过
docker inspect ${容器ID/容器name} | grep LogPath 获取。如果是SpringBoot项目,可以通过添加ConsoleAppender配置将输出定向到docker logs日志中:

xml 复制代码
<configuration>
    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT" />
    </root>
</configuration>

4.其他docker命令

4.1.查看docker版本和信息

docker info命令用于显示 Docker 系统的详细信息,包括容器、镜像、存储驱动、版本等信息; docker version 命令用于显示 Docker 的版本信息,包括 Docker 客户端和 Docker 服务器的版本信息。

shell 复制代码
docker info

docker version

4.2 容器与宿主机的拷贝

docker cp在宿主机上执行,可以实现在容器和宿主机之间相互拷贝文件.

从宿主机向容器内部拷贝文件:

shell 复制代码
docker cp ${宿主机目录} ${容器ID:/容器路径}

从容器向宿主机箱拷贝文件:

shell 复制代码
docker cp ${容器ID:/容器路径} ${宿主机目录}
相关推荐
Mitch3112 分钟前
【漏洞复现】CVE-2015-5531 Arbitrary File Reading
web安全·elasticsearch·网络安全·docker·漏洞复现
wanhengidc18 分钟前
短视频运营行业该如何选择服务器?
运维·服务器
雨中rain33 分钟前
Linux -- 从抢票逻辑理解线程互斥
linux·运维·c++
-KamMinG43 分钟前
Centos7.9安装openldap+phpldapadmin+grafana配置LDAP登录最详细步骤 亲测100%能行
运维·grafana
Bessssss1 小时前
centos日志管理,xiao整理
linux·运维·centos
豆是浪个1 小时前
Linux(Centos 7.6)yum源配置
linux·运维·centos
vvw&1 小时前
如何在 Ubuntu 22.04 上安装 Ansible 教程
linux·运维·服务器·ubuntu·开源·ansible·devops
王铁柱子哟-1 小时前
解决 正在下载VS Code 服务器... 问题
运维·服务器
搬码后生仔1 小时前
asp.net core webapi项目中 在生产环境中 进不去swagger
chrome·后端·asp.net
凡人的AI工具箱1 小时前
每天40分玩转Django:Django国际化
数据库·人工智能·后端·python·django·sqlite