4-8-部署docker容器虚拟化平台

本节所讲内容:

  • Docker概述
  • 部署docker容器虚拟化平台
  • docker镜像制作方法
  • Container容器端口映射

1    Dcoker概述

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app)。几乎没有性能开销,可以很容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。

 

Docker是dotCloud公司开源的一个基于LXC的高级容器引擎,源代码托管在Github上, 基于go语言并遵从Apache2.0协议开源。

Docker让开发者可以打包他们的应用以及依赖包到一个可移植的container中,然后发布到任何流行的Linux机器上。

 

以前发布软件时,以二进制文件,如:office-2012.exe 。

 

扩展:

LXC为Linux Container的简写。Linux Container容器是一种内核虚拟化技术,可以提供轻量级的虚拟化,以便隔离进程和资源,而且不需要提供指令解释机制以及全虚拟化的其他复杂性。

LXC主要通过来自kernel的namespace实现每个用户实例之间的相互隔离,通过cgroup实现对资源的配额和度量。

 

官方网站:

https://www.docker.com/

 

 

logo:

 

 

注:docker- engine相当于鲸鱼,container容器就是集装箱。

container :集装箱,容器

源代码下载:

https://github.com/docker/docker

 

docker容器技术和虚拟机对比:

 

 

 

Docker 架构

 

 

工作流程:服务器A上运行docker Engine 服务,在docker Engine上启动很多容器container , 从外网Docker Hub上把image操作系统镜像下载来,放到container容器运行。 这样一个虚拟机实例就运行起来了。

最后,通过Docker client 对docker 容器虚拟化平台进行控制。

 

Image和Container的关系:image可以理解为一个系统镜像,Container是Image在运行时的一个状态。
如果拿虚拟机作一个比喻的话,Image就是关机状态下的磁盘文件,Container就是虚拟机运行时的磁盘文件,包括内存数据。

 

dockerhubdockerhub是docker官方的镜像存储站点,其中提供了很多常用的镜像供用户下载,如ubuntu, centos等系统镜像。通过dockerhub用户也可以发布自己的docker镜像,为此用户需要注册一个账号,在网站上创建一个docker仓库。

 

Docker 核心技术

1.Namespace — 实现Container的进程、网络、消息、文件系统和主机名的隔离。

2.Cgroup — 实现对资源的配额和度量。

注:Cgrout的配额,就像vmware虚拟机中的配置参数:可以指定cpu个数,内存大小等

 

 

 

特性:

文件系统隔离:每个进程容器运行在一个完全独立的根文件系统里。

资源隔离:系统资源,像CPU和内存等可以分配到不同的容器中,使用cgroup。

网络隔离:每个进程容器运行在自己的网络空间,虚拟接口和IP地址。

日志记录:Docker将会收集和记录每个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。

变更管理:容器文件系统的变更可以提交到新的镜像中,并可重复使用以创建更多的容器。无需使用模板或手动配置。

交互式shell:Docker可以分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。

 

优点:

1.一些优势和VM一样,但不是所有都一样。

比VM小,比VM快,Docker容器的尺寸减小相比整个虚拟机大大简化了分布到云和从云分发时间和开销。Docker启动一个容器实例时间很短,一两秒就可以启动一个实例。

2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT的发布速度更快。

Docker是一个开放的平台,构建,发布和运行分布式应用程序。

Docker使应用程序能够快速从组件组装和避免开发和生产环境之间的摩擦。

3.您可以在部署在公司局域网或云或虚拟机上使用它。

4.开发人员并不关心具体哪个Linux操作系统

使用Docker,开发人员可以根据所有依赖关系构建相应的软件,针对他们所选择的操作系统。

然后,在部署时一切是完全一样的,因为一切都在DockerImage的容器在其上运行。

开发人员负责并且能够确保所有的相关性得到满足。

5.Google,微软,亚马逊,IBM等都支持Docker。

 

缺点局限性:

1.Docker支持Unix/Linux操作系统,不支持Windows或Mac(即使可以在其上安装,不过也是基于Linux虚拟机的)

2.Docker用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在Docker容器外。

 

2    实战1:部署docker容器虚拟化平台

实验环境: RHEL7.2  64位  IP: 192.18.1.63

配置 Docker  YUM 源

[root@localhost ~]# cd /etc/yum.repos.d/

[root@localhost yum.repos.d]# vim docker.repo

[dockerrepo]

name=Docker Repository

baseurl=http://yum.dockerproject.org/repo/main/centos/7/

enabled=1

gpgcheck=0

 

开启路由转发功能,否则容器中的实例上不了网。

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/ip_forward

 

安装 docker-engine 软件包

[root@localhost ~]# yum install -y docker-engine

注:查看下载下来的软件包,可以保存到本地,方便后期使用

[root@xuegod63 packages]# pwd

/var/cache/yum/x86_64/7Server/dockerrepo/packages

[root@xuegod63 packages]# ls

docker-engine-1.10.2-1.el7.centos.x86_64.rpm

docker-engine-selinux-1.10.2-1.el7.centos.noarch.rpm

 

[root@localhost ~]# systemctl start docker    #启动 docker 服务

[root@localhost ~]# systemctl enable docker   #设置开机启动docker服务

 

[root@localhost ~]# docker version    #显示 Docker 版本信息

Client:

 Version:      17.05.0-ce

 API version:  1.29

 Go version:   go1.7.5

 Git commit:   89658be

 Built:        Thu May  4 22:06:25 2017

 OS/Arch:      linux/amd64

 

Server:

 Version:      17.05.0-ce

 API version:  1.29 (minimum version 1.12)

 Go version:   go1.7.5

 Git commit:   89658be

 Built:        Thu May  4 22:06:25 2017

 OS/Arch:      linux/amd64

 Experimental: false

 

查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。

[root@localhost ~]# docker info

Containers: 0

 Running: 0

 Paused: 0

 Stopped: 0

Images: 0

Server Version: 17.05.0-ce

Storage Driver: overlay

 Backing Filesystem: xfs

 Supports d_type: false

Logging Driver: json-file

Cgroup Driver: cgroupfs

Plugins:

 Volume: local

 Network: bridge host macvlan null overlay

Swarm: inactive

Runtimes: runc

Default Runtime: runc

Init Binary: docker-init

 

[root@localhost ~]# docker search centos    #从 Docker Hub 中搜索符合条件的镜像

NAME                               DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED

centos                             The official build of CentOS.                   3620      [OK]      

ansible/centos7-ansible            Ansible on Centos7                              100                  [OK]

jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.3.1611 x8...   82                   [OK]

tutum/centos                       Simple CentOS docker image with SSH access      33                  

imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              30                   [OK]

gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glu...   20

......

名字                        描述                                    受欢迎成度  是否官方提供

如果OFFICIAL 为[ok] ,说明可以放心使用。

 

方法1:从公网docker hub 拉取(下载)image   pull:拉

[root@localhost ~]# docker pull centos      #从 Docker Hub 中拉取或者更新指定镜像。

Using default tag: latest

Error response from daemon: Get https://registry-1.docker.io/v2/library/centos/manifests/latest: Get https://auth.docker.io/token?scope=repository%3Alibrary%2Fcentos%3Apull&service=registry.docker.io: net/http: TLS handshake timeout

[root@localhost ~]# docker pull centos

Using default tag: latest

latest: Pulling from library/centos

74f0853ba93b: Pull complete

Digest: sha256:26f74cefad82967f97f3eeeef88c1b6262f9b42bc96f2ad61d6f3fdf544759b8

Status: Downloaded newer image for centos:latest

 

导入image方法二:

# docker load -i centos-httpd-docker-image.tar  #-i " centos-latest-docker-image.tar " 指定载入的镜像归档

 

查看 images 列表

[root@localhost ~]# docker images  #列出本地所有镜像。其中 [name] 对镜像名称进行关键词查询

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              httpd               7d6583969620        9 months ago        290MB

 

注:Docker的镜像以及一些数据都是在/var/lib/docker目录下

[root@xuegod63 docker]# du -sh /var/lib/docker/*

616K       /var/lib/docker/containers

248M      /var/lib/docker/devicemapper

732K       /var/lib/docker/image

32K  /var/lib/docker/network

4.0K /var/lib/docker/tmp

0      /var/lib/docker/trust

0      /var/lib/docker/volumes

 

3    实战2: docker平台基本使用方法

例1:运行一个 container并加载镜像centos,运行起来这个实例后,在实例中执行 /bin/bash命令

[root@localhost ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              328edcd84f1b        5 weeks ago         193MB

centos              httpd               7d6583969620        9 months ago        290MB

[root@localhost ~]# docker run -i -t centos /bin/bash  #启动一个容器,在其中运行指定命令

[root@cf2b1e717b04 /]#

-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;

 

查看现在容器运行的linux环境:

[root@cf2b1e717b04 /]# ls

anaconda-post.log  dev  home  lib64       media  opt   root  sbin  sys  usr

bin                etc  lib   lost+found  mnt    proc  run   srv   tmp  var

[root@cf2b1e717b04 /]# cat /etc/redhat-release

CentOS Linux release 7.3.1611 (Core)

退出容器:

[root@cf2b1e717b04 /]# exit

 

例2:在 container 中启动一个长久运行的进程

[root@localhost ~]# JOB=$(docker run -d centos /bin/sh -c "while true;do echo hellow world;sleep 1;done")

#-d 后台运行容器,并返回容器ID;
 -c 待完成

[root@localhost ~]# echo $JOB

8a5bd2425dffb345341424b027bdcb35ed50778efaa6c0387dc4c4a02ca9772e

 

从一个容器中取日志,查看标准输出或输入的内容

语法:docker logs 容器的Name/ID 

[root@localhost ~]# docker logs $JOB

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

hellow world

 

查看正在运行的容器:

[root@localhost ~]# docker ps  #列出所有运行中容器。

CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS               NAMES

8a5bd2425dff        centos              "/bin/sh -c 'while..."   About a minute ago   Up About a minute                       reverent_cori

 

[root@xuegod63 ~]# docker ps -a  #-a 列出所有容器(包含沉睡/退出状态的容器);

[root@localhost ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

8a5bd2425dff        centos              "/bin/sh -c 'while..."   28 minutes ago      Up 28 minutes                                   reverent_cori

2179b3907c86        centos              "/bin/sh -c 'while..."   30 minutes ago      Exited (1) 30 minutes ago                       jovial_jepsen

cf2b1e717b04        centos              "/bin/bash"              About an hour ago   Exited (0) 45 minutes ago                       serene_lamport

 

[root@localhost ~]# docker images   #列出所有本地镜像

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              328edcd84f1b        5 weeks ago         193MB

centos              httpd               7d6583969620        9 months ago        290MB

 

例3:杀死一个容器

查看要杀死容器的ID:

[root@localhost ~]# docker ps -a    #列出所有容器

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                         PORTS               NAMES

8a5bd2425dff        centos              "/bin/sh -c 'while..."   35 minutes ago      Up 35 minutes                                      reverent_cori

2179b3907c86        centos              "/bin/sh -c 'while..."   36 minutes ago      Exited (1) 36 minutes ago                          jovial_jepsen

cf2b1e717b04        centos              "/bin/bash"              About an hour ago   Exited (0) About an hour ago                       serene_lamport

[root@localhost ~]# docker kill 8a5bd2425dff

8a5bd2425dff

或者

[root@localhost ~]# docker kill $JOB

 

例4:启动、停止、重启 container容器

[root@localhost ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                           PORTS               NAMES

0e35c8376f2b        centos              "/bin/sh -c 'while..."   7 seconds ago       Up 6 seconds                                         friendly_payne

8a5bd2425dff        centos              "/bin/sh -c 'while..."   About an hour ago   Exited (137) About an hour ago                       reverent_cori

2179b3907c86        centos              "/bin/sh -c 'while..."   About an hour ago   Exited (1) About an hour ago                         jovial_jepsen

cf2b1e717b04        centos              "/bin/bash"              2 hours ago         Exited (0) 2 hours ago                               serene_lamport

[root@localhost ~]# docker stop 0e35c8376f2b  # 关闭容器

 

 

[root@xuegod63 ~]# docker start 1a63ddea6571

 

 

[root@localhost ~]# docker restart 0e35c8376f2b

0e35c8376f2b

 

删除指定 container

[root@localhost ~]# docker rm 0e35c8376f2b

Error response from daemon: You cannot remove a running container 0e35c8376f2bf444492e970b8a6d011046c23708edb6c5274b0e4c8520c1b94d. Stop the container before attempting removal or force remove

解决:你可以先把容器1a63ddea6571 关闭,然后再删除或加-f 强制删除

[root@localhost ~]# docker rm -f 0e35c8376f2b

0e35c8376f2b

4    实战3:Docker Image 的制作两种方法

方法1:docker commit   #保存 container 的当前状态到 image后,然后生成对应的image

方法2:docker build  #使用 Dockerfile 自动化制作 image

 

方法1:docker commit

创建一个新的 container容器,并安装好nmap工具

[root@localhost ~]# docker run -ti centos /bin/bash

[root@a6ef04024ec9 /]# yum install -y nmap-ncat #在 container 中安装 nmap-ncat 软件包

[root@a6ef04024ec9 /]# exit

 

查看images列表

[root@localhost ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              latest              328edcd84f1b        5 weeks ago         193MB

centos              httpd               7d6583969620        9 months ago        290MB

 

根据容器当前状态做一个image镜像:创建一个安装了nmap-ncat工具的centos镜像

提交image语法: docker commit  <container的ID>  <image_name>

例:查看容器ID

[root@localhost ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES

095cbf795f5b        centos              "/bin/bash"              2 minutes ago       Exited (0) 2 minutes ago                        goofy_spence

04e3978d6bb1        centos              "/bin/bash"              2 minutes ago       Exited (0) 2 minutes ago                        vigilant_hamilton

47cc1158fe78        centos              "/bin/bash"              3 minutes ago       Exited (0) 2 minutes ago                        serene_jackson

a6ef04024ec9        centos              "/bin/bash"              11 hours ago        Exited (0) 11 hours ago                         agitated_mclean

8a5bd2425dff        centos              "/bin/sh -c 'while..."   13 hours ago        Exited (137) 12 hours ago                       reverent_cori

2179b3907c86        centos              "/bin/sh -c 'while..."   13 hours ago        Exited (1) 13 hours ago                         jovial_jepsen

cf2b1e717b04        centos              "/bin/bash"              13 hours ago        Exited (0) 13 hours ago                         serene_lamport

[root@localhost ~]# docker commit 095cbf795f5b centos:nmap-ncat

sha256:bf32337f7448d8bfe6d20d7a20a1bb6b819a11d2f853c9352629c71e01102432

[root@localhost ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              nmap-ncat           bf32337f7448        6 seconds ago       193MB

centos              latest              328edcd84f1b        5 weeks ago         193MB

centos              httpd               7d6583969620        9 months ago        290MB

 

使用新创建的nmap-ncat镜像,启动一台容器:

[root@localhost ~]# docker ps -a

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                          PORTS               NAMES

da75772e938c        centos              "/bin/bash"         55 seconds ago      Exited (127) 3 seconds ago                          upbeat_shirley

e86e50b848a4        centos              "/bin/bash"         3 minutes ago       Exited (0) About a minute ago                       boring_mahavira

[root@localhost ~]# docker start da75772e938c

da75772e938c

[root@localhost ~]# docker attach da75772e938c      #进入container

[root@da75772e938c /]# rpm -q nmap-ncat

也可以这样写

[root@localhost ~]# docker exec -it da75772e938c  /bin/bash

nmap-ncat-6.40-7.el7.x86_64

[root@da75772e938c /]# exit

exit

[root@localhost ~]# docker commit da75772e938c centos:namp-ncat   #创建镜像

sha256:fd58d04a7270defeb2d3b42de265156c13470327c800d25ea9c72b7a3567e433

[root@localhost ~]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED              SIZE

centos              namp-ncat           fd58d04a7270        About a minute ago   300MB

centos              latest              328edcd84f1b        5 weeks ago          193MB

使用新创建的nmap-ncat镜像,启动一台容器:

[root@localhost ~]# docker run -it centos:namp-ncat /bin/bash

[root@508f62c23431 /]# rpm -q nmap-ncat

nmap-ncat-6.40-7.el7.x86_64

注:说明基于nmap-ncat镜像的容器创建成功。

 

方法二:通过:docker build创建一个基于centos的httpd web服务器镜像。

以下操作要在docker物理机上操作:

1.创建工作目录

[root@localhost ~]# mkdir /docker-build

[root@localhost ~]# cd /docker-build/

[root@localhost docker-build]# touch Dockerfile

[root@localhost docker-build]#

注: make自动化编译时需要Makefile文件,自动化创建docker镜像时,需要Dockerfile

编辑Dockerfile

Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等。

[root@localhost docker-build]# vim Dockerfile

FROM centos

MAINTAINER userabc <userabc@gmail.com>

RUN yum -y install httpd

ADD start.sh /usr/local/bin/start.sh

ADD index.html /var/www/html/index.html

 

注释:

FROM centos   # FROM 基于本地哪个镜像,这里基于centos镜像

MAINTAINER userabc <userabc@gmail.com>  # MAINTAINER 镜像创建者

RUN yum -y install httpd   #RUN 安装软件用

ADD start.sh /usr/local/bin/start.sh 

ADD index.html /var/www/html/index.html

# ADD  将文件<src>拷贝到新产生的镜像的文件系统对应的路径<dest>。所有拷贝到新镜像中的文件和文件夹权限为0755,uid和gid为0

 

创建 start.sh脚本启动httpd服务

[root@localhost docker-build]# echo "/usr/sbin/httpd -DFOREGROUND" > start.sh

注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd

[root@localhost docker-build]# chmod a+x start.sh

 

创建 index.html

# echo "docker image build test" > index.html

 

使用命令build来创建新的image

语法:docker build -t  父镜像名:自己定义的镜像名   Dockerfile文件所在路径

-t :表示tag,用于指定新的镜像名

 

[root@localhost docker-build]# docker build -t centos:httpd ./

注: . 表示当前目录。另外你的当前目录下要包含Dockerfile,使用命令build来创建新的image,并命名为centos:httpd

 

[root@localhost docker-build]# docker build -t centos:httpd ./

Sending build context to Docker daemon  4.096kB

Step 1/5 : FROM centos

 ---> 328edcd84f1b

Step 2/5 : MAINTAINER userabc <userabc@gmail.com>

 ---> Running in 4a448b8dc6ff

 ---> eafd8a5b57f3

Removing intermediate container 4a448b8dc6ff

Step 3/5 : RUN yum -y install httpd

 ---> Running in a4d76e1b8194

Complete!

 ---> 2aea05b19c10

Removing intermediate container a4d76e1b8194

Step 4/5 : ADD start.sh /usr/local/bin/start.sh

 ---> 0e2bef479a4d

Removing intermediate container 6b5cd886129f

Step 5/5 : ADD index.html /var/www/html/index.html

 ---> d86a6ef782a3

Removing intermediate container 4f589dcdcf51

Successfully built d86a6ef782a3

Successfully tagged centos:httpd

查看images列表

[root@localhost docker-build]# docker images

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

centos              httpd               d86a6ef782a3        34 minutes ago      332MB

nmap-ncat           latest              62a35d450fa4        6 hours ago         300MB

<none>              <none>              3730f71089c0        9 hours ago         300MB

centos              namp-ncat           fd58d04a7270        10 hours ago        300MB

centos              latest              328edcd84f1b        5 weeks ago         193MB

 

5    实战4:Docker Image 的发布:

方法1:Save Image To TarBall

方法2:Push Image To Docker Hub

 

方法1:Save Image To TarBall

保存 Image 到 tar 包

语法:docker save -o 导出的镜像名.tar  本地镜像名

例:

[root@localhost docker-build]# docker save -o centos-httpd-docker-images.tar centos:httpd

查看导出成功

[root@localhost docker-build]# ls

centos-httpd-docker-images.tar  Dockerfile  index.html  start.sh

后期使用方法:

[root@localhost docker-build]# docker load -i centos-httpd-docker-images.tar

 

方法2:Push Image To Docker Hub  发布到外网

1、Signup on docker hub & create repo    注册一个帐号

                 https://hub.docker.com/

2、Login to docker hub

                 # docker login -u userabc -p abc123 -e userab@gmail.com

3、Push image to docker hub

                 # docker push centos:httpd

4、Pull image from docker hub

                 # docker pull userabc/centos:httpd

                                用户名/镜像名

 

 

6    实战5:Container 端口映射

使用新生成centos:httpd镜像,启动一个容器,然后容器中的80端口映射到docker物理上的9000端口上

启动 container

注: -p 9000:80   把容器中的80端口映射到物理机上的9000端口

[root@localhost docker-build]# docker run -d -p 9000:80 centos:httpd /bin/sh -c /usr/local/bin/start.sh

91f5538c6f464a6408ebe1c8249cca4441d40d94fb4c2728c63e0c2b4be20906

在物理机上查看容器状态:

[root@localhost docker-build]# docker ps -a

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS                  NAMES

91f5538c6f46        centos:httpd        "/bin/sh -c /usr/l..."   8 seconds ago       Up 7 seconds               0.0.0.0:9000->80/tcp   nifty_cray

857063c845ec        nmap-ncat           "/bin/bash"              6 hours ago         Exited (127) 6 hours ago                          wonderful_kare

da75772e938c        centos              "/bin/bash"              11 hours ago        Exited (137) 5 hours ago                          upbeat_shirley

e86e50b848a4        centos              "/bin/bash"              11 hours ago        Exited (137) 5 hours ago                          boring_mahavira

 

查看物理机上开启的9000代理端口

[root@localhost docker-build]# netstat -anput | grep 9000

tcp6       0      0 :::9000                 :::*                    LISTEN      6165/docker-proxy

 

[root@localhost docker-build]# curl http://127.0.0.1:9000

docker image build test

或: http://192.168.10.12:9000

 

 

7    实战6:访问正在运行的 container

语法: docker exec -ti <container id | name> /bin/bash

查看正在运行的容器ID:

[root@xuegod63 ~]# docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES

87fadc0249a9        centos:httpd        "/bin/sh -c /usr/loca"   4 minutes ago       Up 4 minutes        0.0.0.0:9000->80/tcp   elated_perlman

 

[root@xuegod63 ~]# docker exec -ti 87fadc0249a9 /bin/bash  #进入容器

 

创建 test.html 文件

[root@87fadc0249a9 /]# echo xuegod > /var/www/html/test.html

[root@87fadc0249a9 /]#

 

测试:在物理机上查看新添加的test.html文件

[root@xuegod63 ~]# curl http://127.0.0.1:9000/test.html

xuegod

 

查看物理机和容器的网络:

查看容器的IP:

[root@a9c3a7bf2054 /]# yum install net-tools

[root@a9c3a7bf2054 /]# ifconfig

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.4  netmask 255.255.0.0  broadcast 0.0.0.0

 

物理机的IP:

[root@xuegod63 ~]# ifconfig

docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500

        inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0

 

测试网络:

[root@xuegod63 ~]# ping  172.17.0.4

PING 172.17.0.4 (172.17.0.4) 56(84) bytes of data.

64 bytes from 172.17.0.4: icmp_seq=1 ttl=64 time=0.414 ms

 

配置容器root密码:

[root@a9c3a7bf2054 /]# echo 123456 | passwd --stdin root

 

8    Docker 容器镜像删除

1.停止所有的container,这样才能够删除其中的images:

docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

2.查看当前有些什么images

docker images

3.删除images,通过image的id来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id为<None>的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)

 

posted @ 2017-09-20 11:16  北极之光的博客  阅读(48)  评论(0编辑  收藏  举报