Docker镜像常用命令 Docker容器常用命令

Posted 我的紫霞辣辣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Docker镜像常用命令 Docker容器常用命令相关的知识,希望对你有一定的参考价值。

Docker镜像的实际使用

开发的机器mac,windows,我又不想搞乱我当前机器的环境

  • mac装一个nginx,二进制安装,编译安装,brew install nginx…

Docker安装服务

  1. 下载安装docker工具
  2. 获取该软件的docker镜像(你以后想要用的各种工具,基本上都能够搜索到合适的镜像去用),下载nginx镜像,docker pull nginx
  3. 运行该镜像,然后就启动了一个容器,这个nginx服务就运行在容器中
  4. 停止容器,删除该镜像

基于镜像的增删改查维护

获取镜像

  • 获取镜像,镜像托管仓库,好比yum源一样。
  • 默认的docker仓库是dockerhub,大量的优质的镜像,以及用户自己上传的镜像,centos容器,vim nginx…提交为镜像,上传到dockerhub。

获取镜像的三种方式

  1. 从dockerhub获取镜像
  2. 本地镜像导出、导入
  3. 私有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容器常用命令的主要内容,如果未能解决你的问题,请参考以下文章

docker常用命令

Docker 最常用的镜像命令和容器命令

Docker镜像常用命令 Docker容器常用命令

Docker镜像常用命令 Docker容器常用命令

Docker----常用命令(镜像和容器的常用命令)

Docker学习重点~docker命令:帮助命令镜像命令容器命令常用其他命令