资讯详情

Docker镜像和容器的使用(初级)

规划

IP地址 主机名 节点
192.168.200.40 master Docker节点

基础准备:安装docker-ce

镜像的基本管理和使用

查看镜像列表

可以使用docker images命令来列出本地主机上的镜像。

[root@master ~]# docker images REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE httpd                        latest              d3017f59d5e2        2 years ago         165MB busybox                      latest              020584afccce        2 years ago         1.22MB nginx                        latest              540a289bab6c        2 years ago         126MB redis                        alpine              6f63d037b592        2 years ago         29.3MB python                       3.7-alpine          b11d2a09763f        2 years ago         98.8MB <none>                       <none>              4cda95efb0e4        2 years ago         80.6MB centos                       latest              0f3e07c0138f        2 years ago         220MB 192.168.200.40:5000/centos   latest              0f3e07c0138f        2 years ago         220MB registry                     latest              f32a97de94e1        3 years ago         25.8MB swarm                        latest              ff454b4a0e84        4 years ago         12.7MB httpd                        2.2.32              c51e86ea30d1        5 years ago         171MB httpd                        2.2.31              c8a7fb36e3ab        5 years ago         170MB 

说明各选项:

可以有多个相同的仓库来源?TAG,代表不同版本的仓库源。http仓库源里有2.2.31、2.2.可使用32等多个不同版本REPOSITORY:TAG命令来定义不同的镜像。 例如,使用版本为2.2.31的http镜像操作容器,命令如下:

[root@master ~]# docker run -i -t -d httpd:2.2.31 /bin/bash 00da2034585c6a771359c4e55a1b62c9196947fcb523898426fc18e868381f5b 

参数说明:

  • -i:交互式操作
  • -t:终端
  • -d:后台运行
  • httpd:2.2.31:镜像名,使用httpd:2.2.在31镜像启动容器的基础上
  • /bin/bash:容器交互式shell

若使用版本为2.2.32的http当镜像运行容器时,命令如下:

[root@master ~]# docker run -i -t -d httpd:2.2.32 /bin/bash 1791ee50dafdae51341bf9d6ef09ac1016d242445afd2d0e1c1d3ba06b194c74 

未指定镜像版本标签的,默认使用latest标签镜像。

获取镜像

在本地主机上使用不存在的镜像时,Docker这个镜像会自动下载。如果需要提前下载,可以使用docker pull语法如下:

docker pull [OPTIONS] NAME[:TAG|@DIGEST] 

OPTIONS说明:

  • -a:拉取所有tagged镜像。
  • –disable-content-trust:无视镜像校验,默认开启。

查找镜像

通常有两种方法可以找到镜像Docker Hub(https://hub.docker.com网站搜索镜像,也可以使用docker search命令搜索镜像。语法如下:

docker search [OPTIONS] TERM 

OPTIONS说明:

  • –automated:只列出automated build镜像类型。
  • –no-trunc:显示完整的镜像描述。
  • –filter=stars:列出不小于指定值的镜像。

例如,需要一个httpd镜像作Web可用于服务docker search命令搜索httpd寻找合适的镜像。

[root@master ~]# docker search --filter=stars=10 httpd NAME                      DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED httpd                     The Apache HTTP Server Project                  4061                [OK]                 centos/httpd-24-centos7   Platform for running Apache httpd 2.4 or bui…   44                                       centos/httpd                                                              35                                      [OK] 

参数说明:

  • NAME:镜像仓库源的名称。
  • DESCRIPTION:镜像描述。
  • OFFICIAL:是否是Docker官方发布。
  • stars:类似GitHub里面的star,表示点赞、喜欢的意思。
  • AUTOMATED:自动构建。

删除镜像

使用镜像删除docker rmi语法如下:命令:

docker rmi [OPTIONS] IMAGE [IMAGE...] 

OPTIONS说明:

  • -f:强制删除。
  • –no-prune:不移除镜像的过程镜像,默认移除。

例如,强制删除本地镜像busybox:

[root@master ~]# docker rmi -f busybox:latest Untagged: busybox:latest Deleted: sha256:020584afccce44678ec82676db80f68d50ea5c766b6e9d9601f7b5fc86dfb96d Deleted: sha256:1da8e4c8d30765bea127dc2f11a17bc723b59480f4ab5292edb00eb8eb1d96b1 

容器的基本管理和使用

运行容器

操作第一个容器执行以下命令:

[root@master ~]# docker run -it --rm -d -p 80:80 nginx:latest
fb3d935052e02dd96079bfdcabeea4ecd72f9fbed0ec4ed6900c90e63b33ccc7

参数说明:

  • -i:交互式操作。
  • -t:终端。
  • -rm:容器退出后随之将其删除,可以避免浪费空间。
  • -p:端口映射。
  • -d:容器在后台运行。

其过程可以简单的描述为: ① 下载Nginx镜像。 ② 启动容器,并将容器的80端口映射到宿主机的80端口。 当使用docker run来创建容器时,Docker在后台运行的标准流程如下: ① 检查本地是否存在指定的镜像,不存在就从公有仓库下载。 ② 利用镜像创建并启动一个容器。 ③ 分配一个文件系统,并在只读的镜像层外面挂载一层可读写层。 ④ 从宿主主机配置的网桥接口中桥接一个虚拟接口到容器中去。 ⑤ 从地址池配置一个IP地址给容器。 ⑥ 执行用户指定的应用程序。

接下来可以通过浏览器验证容器是否正常工作。在浏览器中输入地址http://host_IP,如下图所示: 在这里插入图片描述启动容器的语法如下:

docker start [CONTAINER ID]

例如,启动所有的Docker容器:

docker start $(docker ps -aq)

操作容器

列出运行中的容器。

# docker ps
# docker container ls

列出所有容器(包含终止状态)。

# docker ps -a

查看具体容器的信息。

# docker inspect [container ID or NAMES]

查看容器的使用资源状况。

# docker stats [container ID or NAMES]

查看容器日志。

# docker logs [OPTIONS] [container ID or NAMES]

OPTIONS说明:

  • –details:显示更多的信息。
  • -f,–follow:跟踪实时日志。
  • –sincestring:显示自某个timestamp之后的日志,或相对时间,如42分钟。
  • –tailstring:从日志末尾显示多少行日志,默认是all。
  • -t,–timestamps:显示时间戳。
  • –until string:显示自某个timestamp之前的日志,或相对时间,如42分钟。

进入容器。

# docker exec -it [CONTAINER ID] bash

进入容器后,输入exit或者按Crtl+C键即可退出容器,示例代码如下:

[root@master ~]# docker exec -it fb3d935052e0 bash
root@fb3d935052e0:/# exit
exit
[root@master ~]# 

终止容器

删除终止状态的容器。

# docker rm [CONTAINER ID]

删除所有处于终止状态的容器。

# docker container prune

删除未被使用的数据卷。

# docker volume prune

删除运行中的容器。

# docker rm -f [CONTAINER ID]

批量停止所有的容器。

# docker stop $(docker ps -aq)

批量删除所有的容器。

# docker rm $(docker ps -aq)

终止容器进程,容器进入终止状态。

# docker container stop [CONTAINER ID] 

导入和导出容器

将容器快照导出为本地文件,语法如下:

# docker export [CONTAINER ID] > [tar file]

例如:

[root@master ~]# docker export fb3d935052e0 >nginx.tar
[root@master ~]# ll nginx.tar 
-rw-r--r-- 1 root root 128326656 Jun 28 17:57 nginx.tar

同样的,也可以把容器快照文件再导入为镜像,语法如下:

[root@master ~]# cat nginx.tar |docker import - nginx:test
sha256:e2f7f29bf587c8d325997732e71ff26634e34330e5f88721a756aad7e4594d87
[root@master ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
nginx                        test                e2f7f29bf587        6 seconds ago       125MB
httpd                        latest              d3017f59d5e2        2 years ago         165MB
nginx                        latest              540a289bab6c        2 years ago         126MB
redis                        alpine              6f63d037b592        2 years ago         29.3MB
python                       3.7-alpine          b11d2a09763f        2 years ago         98.8MB
<none>                       <none>              4cda95efb0e4        2 years ago         80.6MB
192.168.200.40:5000/centos   latest              0f3e07c0138f        2 years ago         220MB
centos                       latest              0f3e07c0138f        2 years ago         220MB
registry                     latest              f32a97de94e1        3 years ago         25.8MB
swarm                        latest              ff454b4a0e84        4 years ago         12.7MB
httpd                        2.2.32              c51e86ea30d1        5 years ago         171MB
httpd                        2.2.31              c8a7fb36e3ab        5 years ago         170MB

使用docker import命令导入一个容器快照到本地镜像库时,将丢弃所有的历史记录和元数据信息,即仅保存容器当时的快照状态。

构建自定义镜像

docker commit

docker commit命令用于从容器创建一个新的镜像,其语法如下:

# docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

OPTIONS说明:

  • -a:提交的镜像作者。
  • -c:使用Dockerfile指令来创建镜像。
  • -m:提交时的说明文字。
  • -p:在commit时,将容器暂停。

查看已有的容器。

[root@master ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
fb3d935052e0        nginx:latest        "nginx -g 'daemon of…"   26 minutes ago      Up 26 minutes       0.0.0.0:80->80/tcp       hungry_morse
5e70c25de4a2        registry:latest     "/entrypoint.sh /etc…"   3 days ago          Up 2 hours          0.0.0.0:5000->5000/tcp   registry

将容器fb3d935052e0保存为新的镜像,并添加提交人信息和说明信息。

[root@master ~]# docker commit -a "xiaoming" -m "nginx-test" fb3d935052e0 nginx:v1
sha256:7009ea072f66dcfbf1284ea1c5ca3c22d3b10c3c2318a590dc31d2fd15b9de1c

构建完成后查看构建结果。

[root@master ~]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
nginx                        v1                  7009ea072f66        6 seconds ago       126MB
nginx                        test                e2f7f29bf587        5 minutes ago       125MB
httpd                        latest              d3017f59d5e2        2 years ago         165MB
nginx                        latest              540a289bab6c        2 years ago         126MB
redis                        alpine              6f63d037b592        2 years ago         29.3MB
python                       3.7-alpine          b11d2a09763f        2 years ago         98.8MB
<none>                       <none>              4cda95efb0e4        2 years ago         80.6MB
192.168.200.40:5000/centos   latest              0f3e07c0138f        2 years ago         220MB
centos                       latest              0f3e07c0138f        2 years ago         220MB
registry                     latest              f32a97de94e1        3 years ago         25.8MB
swarm                        latest              ff454b4a0e84        4 years ago         12.7MB
httpd                        2.2.32              c51e86ea30d1        5 years ago         171MB
httpd                        2.2.31              c8a7fb36e3ab        5 years ago         170MB

使用docker commit命令构建的镜像,除了制定镜像的人知道执行过什么命令,怎么生成的镜像,别人根本无从得知。建议使用Dockerfile来制作镜像,镜像的生成过程是透明的, docker commit可用于被入侵后保存现场等操作。

dockerfile

Dockerfile是一个文本文档,其中包含了组合映像的命令,可以使用在命令行中调用任何命令。Docker通过读取Dockerfile中的指令自动生成映像。 docker build命令用于从Dockerfile构建映像。可以在docker build命令中使用-f标志指向文件系统中任何位置的Dockerfile,其语法如下:

# docker build -f /path/to/a/Dockerfile

Dockerfile一般分为4部分:基础镜像信息、维护者信息、镜像操作指令和容器启动时执行指令,“#”为Dockerfile中的注释。

接下来以centos:latest为基础镜像,安装jdk1.8并构建新的镜像centos-jdk。 新建文件夹用于存放JDK安装包和Dockerfile文件。

[root@master ~]# mkdir centos-jdk
[root@master ~]# mv jdk/jdk-8u141-linux-x64.tar.gz ./centos-jdk/ 
[root@master ~]# cd centos-jdk/

编写Dockerfile。

[root@master centos-jdk]# cat Dockerfile 
#Centos with JDK8
#AUthor XiaoMing
# 指定基础镜像
FROM centos
# 指定作者
MAINTAINER XiaoMing
# 新建文件夹用于存放jdk文件
RUN mkdir /usr/local/java
# 将JDK文件复制到镜像内并自动解压
ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/
# 创建软连接
RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
# 设置环境变量
ENV JAVA_HOME /usr/local/java/jdk
ENV JRE_HOME ${JAVA_HOME}/jre
ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
ENV PATH ${JAVA_HOME}/bin:$PATH

使用docker build命令构建新镜像。(-t指定镜像名字和标签)

[root@master centos-jdk]# docker build -t="centos-jdk" .
Sending build context to Docker daemon  185.5MB
Step 1/9 : FROM centos
 ---> 0f3e07c0138f
Step 2/9 : MAINTAINER XiaoMing
 ---> Running in 4694c94fac8e
Removing intermediate container 4694c94fac8e
 ---> 799ed3f24d74
Step 3/9 : RUN mkdir /usr/local/java
 ---> Running in 330fee97c91b
Removing intermediate container 330fee97c91b
 ---> 8df432096586
Step 4/9 : ADD jdk-8u141-linux-x64.tar.gz /usr/local/java/
 ---> f6634da90146
Step 5/9 : RUN ln -s /usr/local/java/jdk1.8.0_141 /usr/local/java/jdk
 ---> Running in 473845e4bed1
Removing intermediate container 473845e4bed1
 ---> 3bc03cc678d4
Step 6/9 : ENV JAVA_HOME /usr/local/java/jdk
 ---> Running in dddc46bebe57
Removing intermediate container dddc46bebe57
 ---> 864d6bbb88e1
Step 7/9 : ENV JRE_HOME ${JAVA_HOME}/jre
 ---> Running in 2817ac7fb9a7
Removing intermediate container 2817ac7fb9a7
 ---> d04fddc1fd06
Step 8/9 : ENV CLASSPATH .:${JAVA_HOME}/lib:${JRE_HOME}/lib
 ---> Running in 95a2d728d3a9
Removing intermediate container 95a2d728d3a9
 ---> d7bf712da26a
Step 9/9 : ENV PATH ${JAVA_HOME}/bin:$PATH
 ---> Running in 224c79163f69
Removing intermediate container 224c79163f69
 ---> b3bcc384d28a
Successfully built b3bcc384d28a
Successfully tagged centos-jdk:latest

查看构建的新镜像

[root@master centos-jdk]# docker images
REPOSITORY                   TAG                 IMAGE ID            CREATED             SIZE
centos-jdk                   latest              b3bcc384d28a        4 minutes ago       596MB

使用新构建的镜像运行容器验证JDK是否安装成功。

[root@master centos-jdk]# docker run -it centos-jdk /bin/bash
[root@9abd145ca72c /]# java -version
java version "1.8.0_141"
Java(TM) SE Runtime Environment (build 1.8.0_141-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.141-b15, mixed mode)
[root@9abd145ca72c /]# 

可以发现JDK已经安装成功了,至此,使用Dockerfile构建镜像已完成。

标签: s30nc15b电感式接近开关

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台