docker的基础命令&docker镜像和docker容器操作

Docker镜像简介

镜像:一个特殊的文件系统,Docker镜像就是一个只读的模板
操作系统分为内核和用户空间。对于 Linux 而言,内核启动后,会挂载 root 文件系统为其提供用户空间
支持。而 Docker 镜像(Image),就相当于是一个 root 文件系统。
Docker 镜像是一个特殊的文件系统,除了提供容器运行时所需的程序、库、资源、配置等文件外,还包
含了一些为运行时准备的一些配置参数(如匿名卷、环境变量、用户等)。
镜像不包含任何动态数据,其内容在构建之后也不会被改变。
Docker 设计时,就充分利用 Union FS 的技术,将其设计为分层存储的架构。 镜像实际是由多层文件系
统联合组成。
镜像构建时,会一层层构建,前一层是后一层的基础。每一层构建完就不会再发生改变,后一层上的任
何改变只发生在自己这一层。
比如,删除前一层文件的操作,实际不是真的删除前一层的文件,而是仅在当前层标记为该文件已删
除。
在最终容器运行的时候,虽然不会看到这个文件,但是实际上该文件会一直跟随镜像。
因此,在构建镜像的时候,需要额外小心,每一层尽量只包含该层需要添加的东西,任何额外的东西应
该在该层构建结束前清理掉。
分层存储的特征还使得镜像的复用、定制变的更为容易。甚至可以用之前构建好的镜像作为基础层,然
后进一步添加新的层,以定制自己所需的内容,构建新的镜像。

Docker容器简介

容器:镜像运行时的实体,Docker利用容器来运行应用。
镜像(Image)和容器(Container)的关系,就像是面向对象程序设计中的类和实例一样,镜像是静态
的定义,容器是镜像运行时的实体。容器可以被创建、启动、停止、删除、暂停等 。
容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。前
面讲过镜像使用的是分层存储,容器也是如此。
容器存储层的生存周期和容器一样,容器消亡时,容器存储层也随之消亡。因此,任何保存于容器存储
层的信息都会随容器删除而丢失。
按照 Docker 最佳实践的要求,容器不应该向其存储层内写入任何数据 ,容器存储层要保持无状态化。
所有的文件写入操作,都应该使用数据卷(Volume)、或者绑定宿主目录,在这些位置的读写会跳过容
器存储层,直接对宿主(或网络存储)发生读写,其性能和稳定性更高。
数据卷的生存周期独立于容器,容器消亡,数据卷不会消亡。因此, 使用数据卷后,容器可以随意删
除、重新 run,数据却不会丢失。
注意:容器在整个应用程序生命周期工作流中提供以下优点:隔离性、可移植性、灵活性、可伸缩性和可控
性。 最重要的优点是可在开发和运营之间提供隔离

docker容器图
在这里插入图片描述

docker环境图
在这里插入图片描述

docker常见操作

操作内容命令
镜像 从官方仓库拉取pull
未来可以自建仓库或者上传到公共仓库push
镜像有不同的版本需要打标签tag
镜像需要保存保存为tar文件save
将打包后的镜像进行加载load
Dockerfile使用脚本文件 构建镜像build
将运行的容器提交成一个镜像commit

通过镜像运行容器 使容器运行

容器操作

1、镜像操作:

1.1、镜像搜索 search

[root@node1 ~]# docker search nginx
NAME                                              DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
nginx                                             Official build of Nginx.                        17284     [OK]       
linuxserver/nginx                                 An Nginx container, brought to you by LinuxS…   173                  
bitnami/nginx                                     Bitnami nginx Docker Image                      139                  [OK]
ubuntu/nginx                                      Nginx, a high-performance reverse proxy & we…   57                   
bitnami/nginx-ingress-controller                  Bitnami Docker Image for NGINX Ingress Contr…   19                   [OK]
rancher/nginx-ingress-controller                                                                  10                   
webdevops/nginx                                   Nginx container                                 9                    [OK]
参数说明
NAME镜像名称
DESCRIPTION镜像说明
STARS点赞数量
OFFICIAL是否是官方的
AUTOMATED是否是自动构建的

1.2、镜像拉取 pull

可以 : 后面带版本

[root@node1 ~]# docker pull nginx:1.14-alpine 
1.14-alpine: Pulling from library/nginx
bdf0201b3a05: Pull complete 
3d0a573c81ed: Pull complete 
8129faeb2eb6: Pull complete 
3dc99f571daf: Pull complete 
Digest: sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
Status: Downloaded newer image for nginx:1.14-alpine
docker.io/library/nginx:1.14-alpine

如果不带版本号默认拉取最新版的镜像

[root@node1 ~]# docker pull nginx

1.3、查看镜像

[root@node1 ~]# docker images
[root@node1 ~]# docker image ls

1.4、镜像导出的方式

第一种 -o output

[root@node1 ~]# docker image save -o centos7.tar centos

第二种 也可以使用重定向导出镜像

[root@node1 ~]# docker image save centos > centos7_2.tar 

1.5、镜像导入

将导出的镜像发送到另一台docker上

[root@node1 ~]# scp centos7.tar 192.168.142.140:/root

在另一台上进行下载

[root@node3 ~]# docker images
REPOSITORY   TAG       IMAGE ID   CREATED   SIZE
[root@node3 ~]# docker image load -i centos7.tar 
74ddd0ec08fa: Loading layer  238.6MB/238.6MB
Loaded image: centos:latest
[root@node3 ~]# docker images
REPOSITORY   TAG       IMAGE ID       CREATED         SIZE
centos       latest    5d0da3dc9764   10 months ago   231MB

1.6、删除镜像

镜像的删除操作会比较简单

[root@node1 ~]# docker image rm nginx:1.14-alpine 
Untagged: nginx:1.14-alpine
Untagged: nginx@sha256:485b610fefec7ff6c463ced9623314a04ed67e3945b9c08d7e53a47f6d108dc7
Deleted: sha256:8a2fb25a19f5dc1528b7a3fabe8b3145ff57fe10e4f1edac6c718a3cf4aa4b73
Deleted: sha256:f68a8bcb9dbd06e0d2750eabf63c45f51734a72831ed650d2349775865d5fc20
Deleted: sha256:cbf2c7789332fe231e8defa490527a7b2c3ae8589997ceee00895f3263f0a8cf
Deleted: sha256:894f3fad7e6ecd7f24e88340a44b7b73663a85c0eb7740e7ade169e9d8491a4c
Deleted: sha256:a464c54f93a9e88fc1d33df1e0e39cca427d60145a360962e8f19a1dbf900da9

2、容器操作

将容器提交成镜像 commit
从镜像中运行一个容器 run
启动容器 start 停止容器 stop 重启容器 restart

2.1、启动容器

方法1:(不推荐做法)

先创建一个容器:docker create 镜像名

[root@node1 ~]# docker container create centos
dd0b13352b4e1a14993fc980f2768b303fdbe0c2923b8c17a964b643929bf3f3
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED         STATUS    PORTS     NAMES
dd0b13352b4e   centos    "/bin/bash"   6 seconds ago   Created             naughty_bose

再启动容器:docker start 容器名

[root@node1 ~]# docker container start dd0b13352b4e
dd0b13352b4e
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                     PORTS     NAMES
dd0b13352b4e   centos    "/bin/bash"   44 seconds ago   Exited (0) 6 seconds ago             naughty_bose

方法2:docker run 镜像名 (推荐方法)

(1)格式

Usage: docker run  [OPTIONS]  IMAGE  [COMMAND]  [ARG...]

(2)options常用命令选项

  • -t:打开一个终端,像使用交换机一样使用容器 -i -t 一般同时使用 -it
  • -i:交互式访问
  • –name:容器名字
  • –network:指定网络
  • –rm:容器一停,自动删除 (可以临时调测使用)
  • -d:剥离与当前终端的关系;否则会一直占据着终端 (很常用)-d 也会跟 -i 分开使用
  • -p :端口映射,将容器内服务的端口映射在宿主机的指定端口
    -p
    -p:
    -p::

(3)示例:运行一个容器
-d 放后台运行 -p 端口映射 81端口映射80端口 ; 没有指定名字name为随机分配名字

[root@node1 ~]# docker run -d -p 81:80 nginx:1.14-alpine 
162c76ef388b43d783634e1a4b9820bbdc7a623c1ac3e312a04f7d78707aca91
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                               NAMES
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   15 seconds ago   Up 14 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha

添加 --name 指定名字查看

[root@node1 ~]# docker run -d -p 82:80  --name web2 nginx:1.14-alpine 
25479bdf29976a7fb0e9bb5993cc9b84c80766d2a81a4acee905f80b51fdfa2e
[root@node1 ~]# docker ps 
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   4 seconds ago    Up 3 seconds    0.0.0.0:82->80/tcp, :::82->80/tcp   web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   50 seconds ago   Up 48 seconds   0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha

[root@node1 ~]# docker port web2  查询docker端口映射
80/tcp -> 0.0.0.0:82
80/tcp -> :::82

容器启动成功,这是安装web服务可以通过网页进行访问测试
在这里插入图片描述
使用 --rm 临时做功能调试,减少删除时间,退出容器即删除容器
运行容器不做端口映射

[root@node1 ~]# docker run -it --rm nginx:1.14-alpine /bin/sh

启动另一个会话可以查看到启动的80端口的nginx容器
在这里插入图片描述
当我们退出时再查看容器状态

[root@node1 ~]# docker run -it --rm nginx:1.14-alpine /bin/sh
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # exit
[root@node1 ~]# 

当退出该容器时,也自动删除容器
在这里插入图片描述

2.2、查询容器的运行状态

[root@localhost~]# docker ps / docker container ls 两个命令是一样的效果

添加 -a 参数 :查询所有的容器

[root@node1 ~]# docker ps 		 #`只显示运行的容器`
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS          PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   18 minutes ago   Up 18 minutes   0.0.0.0:82->80/tcp, :::82->80/tcp   web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   18 minutes ago   Up 18 minutes   0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha
[root@node1 ~]# docker ps -a    #`查询所有容器`
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS                      PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   18 minutes ago   Up 18 minutes               0.0.0.0:82->80/tcp, :::82->80/tcp   web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   19 minutes ago   Up 19 minutes               0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha
dd0b13352b4e   centos              "/bin/bash"              26 minutes ago   Exited (0) 25 minutes ago                                       naughty_bose

2.3、停止运行的容器

docker stop 关闭运行的容器
docker kill 杀死运行的容器
-s:指定信号,和kill 用法一样;-9 强制停止容器
查看容器信息会显示退出状态

[root@node1 ~]# docker stop web2 
web2
[root@node1 ~]#  docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED          STATUS                      PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   20 minutes ago   Exited (0) 6 seconds ago                                        web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   21 minutes ago   Up 21 minutes               0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha
dd0b13352b4e   centos              "/bin/bash"              29 minutes ago   Exited (0) 28 minutes ago                                       naughty_bose

2.4、删除容器

对于未运行退出的容器,可以直接删除即可

[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED             STATUS                         PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   About an hour ago   Up 45 minutes                  0.0.0.0:82->80/tcp, :::82->80/tcp   web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   About an hour ago   Up About an hour               0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha
dd0b13352b4e   centos              "/bin/bash"              About an hour ago   Exited (0) About an hour ago                                       naughty_bose
[root@node1 ~]# docker rm dd0b13352b4e
dd0b13352b4e
[root@node1 ~]# docker ps -a
CONTAINER ID   IMAGE               COMMAND                  CREATED             STATUS             PORTS                               NAMES
25479bdf2997   nginx:1.14-alpine   "nginx -g 'daemon of…"   About an hour ago   Up 45 minutes      0.0.0.0:82->80/tcp, :::82->80/tcp   web2
162c76ef388b   nginx:1.14-alpine   "nginx -g 'daemon of…"   About an hour ago   Up About an hour   0.0.0.0:81->80/tcp, :::81->80/tcp   keen_saha

对于运行中的容器建议先stop 或 kill 停止容器
或者可以强制删除运作中的容器 -f

[root@node1 ~]# docker rm -f 25479bdf2997
25479bdf2997

2.5、查看容器的详细信息

[root@node1 ~]# docker inspect web2 

2.6、对运行的容器执行指定命令exec

[root@localhost ~]# docker exec / docker container exec

(1)格式

Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]

(2)options 选项

  • -d:在后台运行命令
  • -e:设置环境变量
  • -i:交互式
  • -t:打开一个终端
  • -u:用户名或UID

(3)示例

对运行着的容器进入容器查看

[root@node1 ~]# docker exec -it web2 /bin/sh
/ # ls
bin    dev    etc    home   lib    media  mnt    opt    proc   root   run    sbin   srv    sys    tmp    usr    var
/ # ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  
          inet addr:172.17.0.3  Bcast:172.17.255.255  Mask:255.255.0.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:656 (656.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

/ # cd /usr/share/nginx/html/
/usr/share/nginx/html # ls
50x.html    index.html

2.7、查询容器的内部日志

docker logs 容器名字

[root@node1 ~]# curl 192.168.142.149:82
welcome to test page.
[root@node1 ~]# docker logs web2 

2.9、一图总结对容器的操作命令

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值