docker基础命令

Posted 遙遙背影暖暖流星

tags:

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

一、docker命令-镜像

1、查看docker版本

docker -v 
docker version 
decker info  #可以查看所有运行容器的镜像数量,运行容器的版本,可以分配的CPU,总的内存等信息.docker的工作目录 /var/lib/decker

[root@ct ~]# docker version
Client: Docker Engine - Community
 Version:           20.10.8     #版本
 API version:       1.41        #api版本
 Go version:        go1.16.6    #go语言版本
 Git commit:        3967b7d
 Built:             Fri Jul 30 19:55:49 2021
 OS/Arch:           linux/amd64
 Context:           default     #映射默认    
 Experimental:      true        #实验功能开启

Server: Docker Engine - Community
 Engine:
  Version:          20.10.8
  API version:      1.41 (minimum version 1.12)
  Go version:       go1.16.6
  Git commit:       75249d8   #暂存区里的改动给提交到本地的版本库的id
  Built:            Fri Jul 30 19:54:13 2021
  OS/Arch:          linux/amd64
  Experimental:     false
 containerd:
  Version:          1.4.9
  GitCommit:        e25210fe30a0a703442421b0f60afac609f950a3
 runc:
  Version:          1.0.1
  GitCommit:        v1.0.1-0-g4144b63
 docker-init:
  Version:          0.19.0
  GitCommit:        de40ad0
[root@ct ~]#

2、搜索镜像

docker search nginx 
——》自己制作镜像,然后上传到docker hub 上
优化:有效减少镜像大小,dockerfile 优化方向

也可以直接上官网:

https://hub.docker.com/ 》搜nginx》第一个官方分布》tag》找到目的版本的编号
然后抓取下载docker pull nginx:1.21.0

3 、下载镜像

默认是从docker hub

docker pull 镜像名称
例如:docker pull nginx  #不交标签则默认latest,最新版本

4、查看镜像列表

docker images   #查看当前docker下的下载镜像信息
[root@ct ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED       SIZE
#镜像仓库       #标签             #镜像id       #建立时间      #大小
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
redis         v1               f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB    #
nginx         v1               dd34e67e3371   13 days ago    133MB 
#根据image id,发现与上面的其实是同个镜像,只是标签不同  
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB
[root@ct ~]# docker images  redis:v1        #单独看一个镜像,REPOSITORY+TAG为一个镜像(唯一性),而tag可以人为指定的
REPOSITORY   TAG       IMAGE ID       CREATED      SIZE
redis        v1        f6f2296798e9   3 days ago   32.3MB

5 获取镜像信息

docker inspect  镜像ID (或者镜像:标签)      

docker inspect redis:
[root@ct ~]# docker inspect nginx:1.21
[
    {
        "Id": "sha256:dd34e67e3371dc2d1328790c3157ee42dfcae74afffd86b297459ed87a98c0fb",
        "RepoTags": [
            "nginx:1.21",
            "nginx:v1"
        ],
        "RepoDigests": [
            "nginx@sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef"
        ],
        "Parent": "",
....................
[root@ct ~]# docker inspect dd34e67e3371
[
    {
        "Id": "sha256:dd34e67e3371dc2d1328790c3157ee42dfcae74afffd86b297459ed87a98c0fb",
        "RepoTags": [
            "nginx:1.21",  #镜像的其他名有两个
            "nginx:v1"      #另一个镜像名
        ],
        "RepoDigests": [
            "nginx@sha256:4d4d96ac750af48c6a551d757c1cbfc071692309b491b70b2b8976e102dd3fef"
        ],
        "Parent": "",
        "Comment": "",
        "Created": "2021-08-17T11:46:11.370722453Z",
        "Container": "c8f4640bdac21c018ff68bfb015ab66f87de0ed066b73eb6607a832a8abf3581",
        "ContainerConfig": {
            "Hostname": "c8f4640bdac2",


6 、添加镜像标签

docker tag 软件名:旧标签  软件名:新标签 
[root@ct ~]# docker tag nginx:1.21 nginx:lnmp
[root@ct ~]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
redis         v1               f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
#旧的镜像不会消失,新改的镜像名虽然不同,但id不变
nginx         v1               dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB

7、 删除镜像

docker rmi    镜像:标签
docker rmi  `docker images -q`  #-q 列出镜像ID,批量删
docker rmi -f 镜像:标签  #强制删除

8、镜像导出和导入

docker save -o  文件名  镜像名   #导出生成文件
docker load < 文件名    #重新导入镜像   

docker save -o centos-7 centos:7  #导出生成文件centos-7
docker load <centos-7      #导出文件centos-7
[root@ct ~]# cd /opt/
[root@ct opt]# ls
containerd  mysql-5.7.20  mysql-boost-5.7.20.tar.gz
[root@ct opt]# docker save -o centos-7 centos:7   #生成镜像文件
[root@ct opt]# ls
centos-7  containerd  mysql-5.7.20  mysql-boost-5.7.20.tar.gz

[root@ct opt]# docker rmi -f centos:7   #删除原有镜像
Untagged: centos:7
Untagged: centos@sha256:0f4ec88e21daf75124b8a9e5ca03c37a5e937e0e108a255d890492430789b60e
Deleted: sha256:8652b9f0cb4c0599575e5a003f5906876e10c1ceb2ab9fe1786712dac14a50cf

[root@ct opt]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
#没有centos这个镜像了
[root@ct opt]# docker load<centos-7
Loaded image: centos:7
[root@ct opt]# docker images
REPOSITORY    TAG              IMAGE ID       CREATED        SIZE
redis         6.2-alpine3.14   f6f2296798e9   3 days ago     32.3MB
busybox       latest           42b97d3c2ae9   10 days ago    1.24MB
nginx         1.21             dd34e67e3371   13 days ago    133MB
nginx         lnmp             dd34e67e3371   13 days ago    133MB
hello-world   latest           d1165f221234   5 months ago   13.3kB
centos        7                8652b9f0cb4c   9 months ago   204MB
#重新生成


二、docker命令—容器操作

1、 查询容器

docker ps -a   #显示主机上的容器及其状态
docker ps -aq  #显示容器的ip
[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED        STATUS                      PORTS      NAMES
57f77cf81738   centos:7               "/bin/bash"              30 hours ago   Exited (137) 25 hours ago              mystifying_buck
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago     Up 2 days                   6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago     Up 2 days                   6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago     Up 2 days                   80/tcp     socker1


CONTAINER ID:容器ID
IMAGE:镜像版本
CRATED:创建的时间
STATUS:运行的时间
PORTS:暴露的端口
NAMES:名称(可定义)

2、创建容器

docker create -itd nginx:latest /bin/bash
-i 让容器的标准输入保持打开
-t 分配一个伪终端
-d 后台守护进程的方式运行

3、 启动容器

docker start  容器id
docker run centos:7 /usr/bin/bash -c ls /
启动容器(一次性执行)

docker run -itd centos:7 /bin/bash/
#在后台持续进行

4、停止容器

docker stop  容器ID
#状态码0:正常退出,非0值表示非正常退出,137表示主动停止退出
[root@ct ~]# docker stop 57f77cf81738
57f77cf81738

5 、容器持续后台运行

[root@ct ~]# docker run -d centos:7 /usr/bin/bash -c "while true;do echo hello;done"
418050aa42b7e7c182eb484cb9b80519c708c0638d65c9add6ebfc016ce00633
[root@docker ~]# watch -n 2 docker ps -a    #每两秒执行
[root@docker ~]# docker rm `docker ps -aq`    #不会删除正在运行的

6 、进入容器

使用run
docker run -it nginx:latest /bin/bash         #一次性的,退出则关闭
exec(容器必须为开启状态)
docker exec -it  容器ID /bin/bash

PS:
docker run -it 会创建前台进程,但是会在输入exit后终止进程。
docker attach  会通过连接stdin,连接到容器内输入输出流,会在输入exit后终止进程.
docker exec -it 会连接到容器,可以像SSH一样进入容器内部,进行操作,可以通过exit退出容器,不影响容器运行。

[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              3 seconds ago   Up 2 seconds              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago      Up 2 days      80/tcp     socker1
[root@ct ~]# docker exec -it e86cc40e5351   /bin/bash
[root@e86cc40e5351 /]# ls    #centos的容器中也有虚拟文件
anaconda-post.log  dev  home  lib64  mnt  proc  run   srv  tmp  var
bin                etc  lib   media  opt  root  sbin  sys  usr
[root@e86cc40e5351 /]# exit     #退出
exit


7、 容器导出与导入

docker export    容器ID   >   文件名       #导出
docker import  导出的文件名(容器)  指定镜像名称    #导入容器文件,重新生成镜像
[root@ct ~]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              5 minutes ago   Up 5 minutes              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
886cd3d8c81e   nginx:1.21             "/docker-entrypoint.…"   2 days ago      Up 2 days      80/tcp     socker1
[root@ct ~]# cd /opt/

[root@ct opt]# docker export 886cd3d8c81e > nginx-1.21    #生成文件
[root@ct opt]# ls
 nginx-1.21

[root@ct opt]# docker stop  886cd3d8c81e   #停止容器并删除容器
886cd3d8c81e
[root@ct opt]# docker rm  886cd3d8c81e
886cd3d8c81e
[root@ct opt]# docker rmi nginx:1.21    #删除镜像
Untagged: nginx:1.21
Deleted: sha256:0b4bf752f838f3b775546fd465d4afa64dd04ccb9e6ebca10ada8a10aeefef42
Deleted: sha256:109b539aca08b0ca21c16a38493491ee223a75e2b9738ac7145150155eec36db

[root@ct opt]# docker import nginx-1.21 nginx:1.21  #重新注入
sha256:0b4bf752f838f3b775546fd465d4afa64dd04ccb9e6ebca10ada8a10aeefef42
[root@ct opt]# docker ps -a
CONTAINER ID   IMAGE                  COMMAND                  CREATED         STATUS         PORTS      NAMES
e86cc40e5351   centos:7               "/bin/bash"              8 minutes ago   Up 8 minutes              great_golick
1ce04b9f9cad   f6f2296798e9           "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   nervous_dirac
914b1af0ecb0   redis:6.2-alpine3.14   "docker-entrypoint.s…"   2 days ago      Up 2 days      6379/tcp   raide1
[root@ct opt]# docker images    #镜像重新出现
REPOSITORY    TAG              IMAGE ID       CREATED         SIZE
nginx         1.21             8345d48257de   4 seconds ago   132MB
redis         6.2-alpine3.14   f6f2296798e9   4 days ago      32.3MB
busybox       latest           42b97d3c2ae9   11 days ago     1.24MB
nginx         lnmp             dd34e67e3371   2 weeks ago     133MB

8、删除容器

docker rm 容器ID
docker rm -f 容器ID    #强制删除

docker ps -a | awk '{print "docker rm "$1}' | bash
#批量删除容器

docker rm `docker ps -aq`
 #批量删除不在运行的容器,-f则强势删除所有

for i in 'docker ps -a | grep -i exit | awk '{print $1}'`; do docker rm -f $i; done
#批量删除"exit"状态的容器

二、docker的网络模式

1、 host模式

容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口
如果启动容器的时候使用host模式,那么这个容器将不会获得一个独立的Network Namespace,而是和宿主机共用一个Network Namespace。容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口。但是,容器的其他方面,如文件系统、进程列表等还是和宿主机隔离的。

使用host模式的容器可以直接使用宿主机的IP地址与外界通信,容器内部的服务端口也可以使用宿主机的端口,不需要进行NAT,host最大的优势就是网络性能比较好,但是docker host上已经使用的端口就不能再用了,网络的隔离性不好。

2 container:

创建的容器不会创建自己的网卡、设置IP等,而是和一个指定的容器共享IP、端口范围
这个模式指定新创建的容器和已经存在的一个容器共享一个network namespace,而不是和宿主机共享,新创建的容器不会创建自己的网卡,配置自己的IP,而是和一个指定地容器共享IP、端口范围等。同样,两个容器除了网络方面,其他的如文件系统、进程列表还是隔离的。两个容器的进程可以通过loo网卡设备通信

3、 None模式

该模式关闭了容器的网络功能
这种网络模式下容器只有lo回环网口,没有其他的网卡。none模式可以在容器创建时通过-network=none参数指定
这种类型的网络无法联网,但是封闭的网络能很好的保证容器的安全性

4 、Bridge模式

此模式会为每一个容器分配、设置IP等,并将容器连接到一个docker虚拟网桥,通过docker 0 网桥及iptables的nat,表配置与宿主机通信
当Docker进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的Docker容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。
从docker0子网中分配一个IP给容器使用,并设置docker0 的IP地址为容器的默认网关。在主机上创建一对虚拟网卡veth pair 设备,Docker 将 veth pair 设备的一端放在新创建的容器中,并命名为etho(容器的网卡),另一端放在主机中,以vethxxx,这样类似的名字命名,并将这个网络设备加入到docker0 网桥中。可以通过brctl show命令查看。
bridge模式是docker 的默认网络模式,不写-net参数,就是 bridge模式。使用docker run -p时, docker实际是在iptables,做了DNAT规则,实现端口转发功能。可以使用jptables. -t nat -vnL查看。

以上是关于docker基础命令的主要内容,如果未能解决你的问题,请参考以下文章

docker简介和基础命令

Docker 学习 | 基础命令

Docker 基础知识-入门篇

Docker基础命令详解——镜像及容器操作

1. Docker基础命令

Docker基础命令