使用docker login和docker logout分别用于登录和退出docker仓库。
#登录时携带用户名、密码、仓库地址信息
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
使用docker images 查看本地docker镜像列表:
[root@VM-4-6-centos ~]# docker images | grep httpd
httpd beta2 559eaf86a53b 6 hours ago 167MB
httpd latest 59bcd61b45fd 3 weeks ago 167MB
通过docker build可以根据Dockerfile生成docker镜像
docker build -t ${镜像名称:版本号} -f ${Dockerfile路径} ${构建上下文路径}
使用docker search 从远程仓库根据名称搜索镜像:
#从docker仓库搜索名称与httpd相关的镜像
docker search httpd
使用docker pull 从远程仓库下载镜像:
[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 向仓库推送镜像:
docker push ${仓库地址}/${镜像名:版本号}
[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
使用docker tag对镜像打标签:
[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给镜像打上仓库地址标签:
[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
使用docker rmi删除镜像
[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
注意:只有对应容器的镜像才可以被删除。
使用docker inspect查看详情, 使用方式:
docker inspect ${镜像ID或者镜像名}
docker ps 查看正在运行的容器,docker ps -a查询所有容器(包含已停止运行的容器):
[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表示容器正在运行。
docker run
-d
--name ${容器name}
-p ${宿主机端口:容器端口}
-v ${宿主机路径:容器路径}
${镜像名}
${启动命令}
-p用于添加宿主机与容器的端口映射关系,多个端口映射时,需要使用多个-p进行标注;
-v用于在宿主机和容器之间挂载文件系统,多个挂载卷时,需要使用多个-v进行标注。
-d 表示在后台运行;
–name 为容器指定名称,否则会随机生成。
#启停容器
docker stop ${容器ID/容器name}
docker start ${容器ID/容器name}
docker restart ${容器ID/容器name}
#删除容器
docker rm ${容器ID/容器name}
注意:镜像可以被删除的前提条件是对应的容器都处于停止状态。
docker exec -it ${容器ID/容器name} ${sh或者bash}
也可通过docker attach进入容器中,但attach进入的是容器启动命令的终端。
docker commit ${容器ID/容器name} ${镜像名:版本号}
相对于docker commit命令,更推荐使用Dockerfile创建镜像,可参考:云原生容器化-3 Dockerfile
docker inspect ${容器ID/容器name}
返回一个JSON格式对象,包含容器的ID、IP地址和网关、端口映射、挂载卷等详细信息。
如下所示为docker inspect命令的执行结果,省去部分信息后如下:
[
{
// 容器的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",
}
}
]
#查看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日志中:
<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%npattern>
encoder>
appender>
<root level="info">
<appender-ref ref="STDOUT" />
root>
configuration>
docker info命令用于显示 Docker 系统的详细信息,包括容器、镜像、存储驱动、版本等信息; docker version 命令用于显示 Docker 的版本信息,包括 Docker 客户端和 Docker 服务器的版本信息。
docker info
docker version
docker cp在宿主机上执行,可以实现在容器和宿主机之间相互拷贝文件.
从宿主机向容器内部拷贝文件:
docker cp ${宿主机目录} ${容器ID:/容器路径}
从容器向宿主机箱拷贝文件:
docker cp ${容器ID:/容器路径} ${宿主机目录}