Docker镜像常用命令 Docker容器常用命令
Posted 我的紫霞辣辣
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像常用命令 Docker容器常用命令相关的知识,希望对你有一定的参考价值。
Docker镜像的实际使用
开发的机器mac,windows,我又不想搞乱我当前机器的环境
- mac装一个nginx,二进制安装,编译安装,brew install nginx…
Docker安装服务
- 下载安装docker工具
- 获取该软件的docker镜像(你以后想要用的各种工具,基本上都能够搜索到合适的镜像去用),下载nginx镜像,docker pull nginx
- 运行该镜像,然后就启动了一个容器,这个nginx服务就运行在容器中
- 停止容器,删除该镜像
基于镜像的增删改查维护
获取镜像
- 获取镜像,镜像托管仓库,好比yum源一样。
- 默认的docker仓库是dockerhub,大量的优质的镜像,以及用户自己上传的镜像,centos容器,vim nginx…提交为镜像,上传到dockerhub。
获取镜像的三种方式
- 从dockerhub获取镜像
- 本地镜像导出、导入
- 私有docker仓库
# 先搜索一下,查看镜像文件是否存在
docker search 镜像名:tag tag就是具体的标签版本
docker search centos
# 查看本地的镜像文件有哪些
docker images
docker image ls
# 下载docker镜像
docker pull centos # 默认是 centos:latest(最新版本)
docker pull centos:7.8.2003
# 查看docker镜像的存储路径
[root@docker01 ~]# docker info | grep Root
Docker Root Dir: /var/lib/docker
# 镜像文件的存储目录
ll /var/lib/docker/image/overlay2/imagedb/content/sha256/
# 该目录下文件的作用是记录镜像和容器的配置关系
# 使用镜像生成不同的容器
# --it 开启一个交互式的终端 --rm 容器退出时删除该容器
[root@docker01 ~]# docker run -it --rm centos bash
[root@3b17f2423ec7 /]# cat /etc/redhat-release
CentOS Linux release 8.3.2011
[root@3b17f2423ec7 /]# exit
exit
[root@docker01 ~]# docker run -it --rm centos:7.8.2003 bash
[root@1972d6fe4044 /]# cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@1972d6fe4044 /]#
查看镜像
# 查看本地的全部镜像
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4cdc5dd7eaad 41 hours ago 133MB
redis latest 08502081bff6 2 weeks ago 105MB
ubuntu latest 9873176a8ff5 2 weeks ago 72.7MB
centos latest 300e315adb2f 7 months ago 209MB
centos 7.8.2003 afb6fca791e0 14 months ago 203MB
# 查看具体的镜像
[root@docker01 ~]# docker images centos
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 300e315adb2f 7 months ago 209MB
centos 7.8.2003 afb6fca791e0 14 months ago 203MB
[root@docker01 ~]# docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4cdc5dd7eaad 41 hours ago 133MB
# 指定具体的tag
[root@docker01 ~]# docker images centos:7.8.2003
REPOSITORY TAG IMAGE ID CREATED SIZE
centos 7.8.2003 afb6fca791e0 14 months ago 203MB
# 只列出镜像的id
# -q 只列出id
[root@docker01 ~]# docker images -q
4cdc5dd7eaad
08502081bff6
9873176a8ff5
300e315adb2f
afb6fca791e0
# 格式化显示镜像
# --format "{{}}"这是docker的模板语言
[root@docker01 ~]# docker images --format "{{.ID}}--{{.Repository}}"
4cdc5dd7eaad--nginx
08502081bff6--redis
9873176a8ff5--ubuntu
300e315adb2f--centos
afb6fca791e0--centos
# 以表格形式显示,美化
[root@docker01 ~]# docker images --format "table {{.ID}}\\t{{.Repository}}\\t{{.Tag}}"
IMAGE ID REPOSITORY TAG
4cdc5dd7eaad nginx latest
08502081bff6 redis latest
9873176a8ff5 ubuntu latest
300e315adb2f centos latest
afb6fca791e0 centos 7.8.2003
# 查看镜像文件是否存在
docker search 镜像名:tag tag就是具体的标签版本
docker search centos
删除镜像
# 下载镜像
[root@docker01 ~]# docker pull hello-world
# 查看镜像id
[root@docker01 ~]# docker images hello-world
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest d1165f221234 4 months ago 13.3kB
# 根据镜像的id,名字,摘要等
# 被删除的镜像,不得有依赖的容器记录
[root@docker01 ~]# docker rmi hello-world
# 显示所有的容器,包括未运行的
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
c5957e1a2fcb hello-world "/hello" 2 minutes ago Exited (0) 2
e3fdec7bd3ff nginx "/docker-entrypoint.…" 3 hours ago Created
455ebd1b9508 nginx "/docker-entrypoint.…" 4 hours ago Up 4 hours
238d08669482 9873176a8ff5 "bash" 5 hours ago Exited (0) 5
01541754159a ubuntu "bash" 9 hours ago Exited (0) 9
f516f10548c1 afb6fca791e0 "bash" 9 hours ago Exited (0) 9
# 删除容器记录
[root@docker01 ~]# docker rm c5957e1a2fcb
# 指定id删除只需要输入id的前三位即可
[root@docker01 ~]# docker run d11
镜像管理
# 批量删除镜像的用法,rm
# 批量删除镜像,慎用
[root@docker01 ~]# docker rmi `docker images -qa`
# 批量删除容器
[root@docker01 ~]# docker rm `docker ps -qa`
# 导出镜像
# 比如默认运行的centos镜像,不提供vim功能,运行该容器后,在容器内安装vim
# 然后提交该镜像,再导出镜像该镜像为压缩文件,可以发给其他人用
# 运行镜像,生成容器并进入容器
[root@docker01 ~]# docker run -it centos:7.8.2003 bash
# 导出镜像
[root@docker01 ~]# docker image save centos:7.8.2003 > /opt/centos7.8.2003.tgz
[root@docker01 ~]# ls -lh /opt
total 202M
-rw-r--r-- 1 root root 202M Jul 8 21:14 centos7.8.2003.tgz
drwx--x--x 4 root root 28 Jul 7 20:46 containerd
# 导入镜像
[root@docker01 ~]# docker rmi `docker ps -aq`
[root@docker01 ~]# docker rmi centos:7.8.2003
[root@docker01 ~]# docker image load -i /opt/centos7.8.2003.tgz
fb82b029bea0: Loading layer 211.1MB/211.1MB
Loaded image: centos:7.8.2003
# 查看镜像详细信息
# 查看docker服务的信息
docker info
# 查看镜像详细的信息
docker image inspect 镜像id
docker image inspect afb
Docker容器管理
docker run 等于创建+启动
docker run 镜像名,如果镜像不存在本地,则会在线下载该镜像
- 注意:容器内进程必须在前台运行,否则容器就会直接退出。
- 容器内,必须有一个进程在前台运行。
- 自己部署一个容器运行,命令不得再后台运行,前台运行即可。
我们运行nginx基础镜像,没有运行任何程序,因此容器直接挂掉
1.运行一个挂掉的容器
# 该写法是错误写法,产生了容器记录,但是容器内并没有程序在跑,因此挂了
[root@docker01 ~]# docker run centos:7.8.2003
2. 运行容器,且进入容器内
[root@docker01 ~]# docker run -it centos:7.8.2003 bash
[root@9acaa2b26cfb /]#cat /etc/redhat-release
CentOS Linux release 7.8.2003 (Core)
[root@9acaa2b26cfb /]# exit
3. 开启一个容器,让它帮你运行某个程序
[root@docker01 ~]# docker run centos:7.8.2003 ping -c1 baidu.com
PING baidu.com (220.181.38.148) 56(84) bytes of data.
64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=127 time=29.6 ms
--- baidu.com ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 29.654/29.654/29.654/0.000 ms
4. 运行一个活着的容器,docker ps可以看到的容器
# -d参数,让容器在后台跑着(针对宿主机而言)
[root@docker01 ~]# docker run -d centos:7.8.2003 ping baidu.com
f0bca235a3cac29b68d1f08fe059be5bfdef4ac0d649f1fd10840b54792376de
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f0bca235a3ca centos:7.8.2003 "ping baidu.com" About a minute ago Up About a minute relaxed_gates
5. 丰富docker运行的参数
-d 后台运行
--rm 容器挂掉后自动被删除,使用docker stop 95d无法看到容器记录
--name 给容器取名
[root@docker01 ~]# docker run -d --rm --name pythonav centos:7.8.2003 ping pythonav.cn
95dc84141cd9f35e59a2d89dba920b20f2cae0bc3e8739b02d7b6780d2e1853c
6. 查看容器日志
-f 实时监控日志
[root@docker01 ~]# docker logs -f [容器id]
[root@docker01 ~]# docker logs f0bca235a3ca | tail -3
7. 进入正在运行的容器空间内
[root@docker01 ~]# docker exec -it f0bca235a3ca bash
8. 查看容器的详细信息
[root@docker01 ~]# docker container inspect f0bca235a3ca
9. 容器的端口映射
# 后台运行nginx容器,且改名为nana,且端口映射宿主机的85端口,访问到容器内的80端口
[root@docker01 ~]# docker run -d --name nana -p 85:80 nginx
58236760dcf2d045205b4c3533bf764759ecc34f7f614ba34682c3f53d02cea4
# 查看容器
[root@docker01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
58236760dcf2 nginx "/docker-entrypoint.…" 54 seconds ago Up 53 seconds 0.0.0.0:85->80/tcp, :::85->80/tcp nana
# 查看容器的端口转发情况
[root@docker01 ~]# docker port 58236760dcf2
80/tcp -> 0.0.0.0:85
80/tcp -> :::85
# 随机端口映射 -P 随机访问一个宿主机的空闲端口,映射到容器内打开的端口
[root@docker01 ~]# docker run -d --name nana_nginx_88 -P nginx
1799b94cab0966c8ac4bd4a55aa97fdd876638f11fdafe34600371f4e626b590
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1799b94cab09 nginx "/docker-entrypoint.…" 6 seconds ago Up 5 seconds 0.0.0.0:49153->80/tcp, :::49153->80/tcp nana_nginx_88
10. 容器的提交
# 运行基础的centos:7.8.2003,在容器内安装vim,然后提交新的镜像
# 新的镜像,再运行出的容器,默认就携带vim了
[root@docker01 ~]# docker run -it centos:7.8.2003 bash
[root@39da3ad323b7 /]# yum -y install vim
[root@39da3ad323b7 /]# exit
exit
[root@docker01 ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
39da3ad323b7 centos:7.8.2003 "bash" About a minute ago Exited (0) 27 seconds ago infallible_kepler
[root@docker01 ~]# docker commit 39da3ad323b7 nana/centos-vim-7.8.2003
sha256:aa12ab31b0d8867d87c98a7f9c39d7aa447bdae4028d4fddfef91fdb40aa1d27
[root@docker01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nana/centos-vim-7.8.2003 latest aa12ab31b0d8 20 seconds ago 382MB
nginx latest 4cdc5dd7eaad 43 hours ago 133MB
centos 7.8.2003 afb6fca791e0 14 months ago 203MB
[root@docker01 ~]# docker run -it aa1
[root@b862a92c93dd /]# vim a.txt
[root@b862a92c93dd /]# cat a.txt
我的紫霞辣辣
以上是关于Docker镜像常用命令 Docker容器常用命令的主要内容,如果未能解决你的问题,请参考以下文章