【linxu】部署docker容器虚拟化平台

实验所涉内容

  1. Docker 概述
  2. 部署 docker 容器虚拟化平台
  3. docker 平台基本使用方法
  4. 建立docker镜像和发布镜像方法
  5. Container 容器端口映射

一 Docker 概述

  • Docker 是一个开源的应用容器引擎,让开发者能够打包他们的应用以及依赖包到一个可移植的容器中,而后发布到任何流行的 Linux 机器上,也能够实现虚拟化。容器是彻底使用沙箱机制,相互之间不会有任何接口(相似 iPhone的app)。几乎没有性能开销,能够徆容易地在机器和数据中心中运行。最重要的是,他们不依赖于任何语言、框架或包装系统。
  • Docker 是 dotCloud 公司开源的一个基于 LXC 的高级容器引擎,源代码托管在 Github 上, 基于 go 语言并听从 Apache2.0 协议开源。Docker 让开发者能够打包他们的应用以及依赖包到一个可移植的 container 中,而后发布到任何流行的Linux 机器上。
  • 扩展:1. LXC 为 Linux Container 的简写。 Linux Container 容器是一种内核虚拟化技术,能够提供轻量级的虚 拟化,以便隔离进程和资源,并且不须要提供指令解释机制以及全虚拟化的其余复杂性。2. LXC 主要经过来自 kernel 的 namespace 实现每一个用户实例之间的相互隔离,经过 cgroup 实现对资源的配额和度量。
  • 官方网站:https://www.docker.com/
  
  • 源代码下载:https://github.com/docker/docker
  
  • docker 容器技术和虚拟机对比
  相同点: docker 容器技术和虚拟机技术,都是虚拟化技术。 
        
  总结:docker 相对于 VM 虚拟机,少了虚拟机操做系统这一层,因此 docker 效率比虚拟机高。你的物理系统启劢使用几秒?10 秒  而在 docker 上启劢一个实例 1-2 秒 
  •  Docker 架构
    
(1)工做流程:服务器 A 上运行 docker Engine 服务,在 docker Engine 上启动不少容器 container , 从外网 Docker Hub 上把 image 操做系统镜像下载下来,放到 container 容器运行。这样一个容器的实例就运行起来了。最后,经过 Docker client 对   docker 容器虚拟化平台进行控制。
(2)dockerhub:dockerhub 是 docker 官方的镜像存储站点,其中提供了不少经常使用的镜像供用户下载,如ubuntu, centos 等系统镜像。经过 dockerhub 用户也能够发布本身的 docker 镜像,为此用户须要注册一个帐号,在网站上建立一个 docker 仓库。
  • Docker 核心技术
  Namespace — 实现 Container 的进程、网络、消息、文件系统和主机名的隔离。
  Cgroup — 实现对资源的配额和度量。注:Cgroup 的配额,能够指定实例使用的 cpu 个数,内存大小等。
  • Docker 特性
  1.文件系统隔离:每一个进程容器运行在一个彻底独立的根文件系统里。
  2.资源隔离:系统资源,像 CPU 和内存等能够分配到不一样的容器中,使用 cgroup。
  3.网络隔离:每一个进程容器运行在本身的网络空间,虚拟接口和 IP 地址。
  4.日志记彔:Docker 将会收集和记彔每一个进程容器的标准流(stdout/stderr/stdin),用于实时检索或批量检索。
  5.变动管理:容器文件系统的变动能够提交到新的镜像中,并可重复使用以建立更多的容器。无需使用模板或手动配置。
  6.交互式 shell:Docker 能够分配一个虚拟终端并关联到任何容器的标准输入上,例如运行一个一次性交互shell。
  • Docker优
  1.一些优点和 VM 同样,但不是全部都同样。
  比 VM 小,比 VM 快,Docker 容器的尺寸减少相比整个虚拟机大大简化了分布到云和从云分发时间和开销。 Docker 启劢一个容器实例时间很短,一两秒就能够启劢一个实例。
  2.对于在笔记本电脑,数据中心的虚拟机,以及任何的云上,运行相同的没有变化的应用程序,IT 的发布速度更快。Docker 是一个开放的平台,构建,发布和运行分布式应用程序。Docker 使应用程序可以快速从组件组装和避免开发和生产环境之间的摩擦。
  3.您能够在部署在公司局域网戒云戒虚拟机上使用它。
  4.开发人员并不关心具体哪一个 Linux 操做系统使用 Docker,开发人员能够根据全部依赖关系构建相应的软件,针对他们所选择的操做系统。而后,在部署时一切是彻底同样的,由于一切都在 DockerImage 的容器在其上运行。开发人员负责而且可以确保全部的相关性获得知足。
  5.Google,微软,亚马逊,IBM 等都支持 Docker。
  6.Docker 支持 Unix/Linux 操做系统,也支持 Windows 戒 Mac
  
  缺点局限性:
  1.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等一般应放在 Docker 容器外。 一个容器的镜像一般都很小,不适合存大量数据,存储能够经过外部挂载的方式使用。好比使用:NFS,  ipsan,MFS 等。一句话:docker 只用于计算,存储交给别人。

二 部署 docker 容器虚拟化平台

       注: 想使用此 docker yum 源,须要使用 RHEL7.3 版本之后系统。 
  • 初始环境:RHEL7.4 64 位,虚拟机可上外网(NAT模式),ip为192.168.10.1/24,默认yum源不用配置:
 1 [base]  2 name=CentOS-$releasever - Base  3 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
 4 #baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
 5 gpgcheck=1
 6 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 7 
 8 #released updates  9 [updates] 10 name=CentOS-$releasever - Updates 11 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
12 #baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
13 gpgcheck=1
14 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
15 
16 #additional packages that may be useful 17 [extras] 18 name=CentOS-$releasever - Extras 19 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
20 #baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
21 gpgcheck=1
22 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
23 
24 #additional packages that extend functionality of existing packages 25 [centosplus] 26 name=CentOS-$releasever - Plus 27 mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
28 #baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
29 gpgcheck=1
30 enabled=0
31 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
 
  •  安装docker服务
  注意:将 yum 下载下来的软件包,能够保存到本地,方便后期使用 :
  [root@foryou ~]# vim /etc/yum.conf
  改: 3 keepcache=0
  为: 3 keepcache=1
  [root@foryou ~]# yum -y install docker(通常不会出现问题)
  
  • 查看rpm软件下载后的存放位置:
1 [root@foryou ~]# ls /var/cache/yum/x86_64/7/extras/packages/
2 container-selinux-2.66-1.el7.noarch.rpm                     oci-register-machine-0-6.git2b44233.el7.x86_64.rpm 3 container-storage-setup-0.10.0-1.gitdf0dcd5.el7.noarch.rpm  oci-systemd-hook-0.1.16-1.git05bd9a0.el7.x86_64.rpm 4 docker-1.13.1-68.gitdded712.el7.centos.x86_64.rpm           oci-umount-2.3.3-3.gite3c9055.el7.x86_64.rpm 5 docker-client-1.13.1-68.gitdded712.el7.centos.x86_64.rpm    skopeo-containers-0.1.31-1.dev.gitae64ff7.el7.centos.x86_64.rpm 6 docker-common-1.13.1-68.gitdded712.el7.centos.x86_64.rpm 7 [root@foryou ~]# ls /var/cache/yum/x86_64/7/extras/packages/ | wc -l 8 9
  • 开启路由转发功能,不然容器中的实例上不了网:
1 [root@foryou ~]# vim /etc/sysctl.conf #在文件最后添加,以一下红色标记内容 2 net.ipv4.ip_forward = 1
3 [root@foryou ~]# sysctl -p #使用配置生效 4 net.ipv4.ip_forward = 1
5 [root@foryou ~]# /etc/init.d/network restart # 重启网络使其生效 6 Restarting network (via systemctl): [ OK ] 7 [root@foryou ~]# cat /proc/sys/net/ipv4/ip_forward #查看 8 1
  • 启动docker平台
1 [root@foryou ~]# systemctl start docker # 启动docker服务 2 [root@foryou ~]# systemctl enable docker # 设置开机启动docker服务 3 Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service. 4 [root@foryou ~]# docker version  # 显示docker版本信息
  • 查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。
 1 [root@foryou ~]# docker info  2 Containers: 0
 3  Running: 0
 4  Paused: 0
 5  Stopped: 0
 6 Images: 0
 7 Server Version: 1.13.1
 8 Storage Driver: overlay2  9  Backing Filesystem: xfs # 文件系统为xfs 10  Supports d_type: true
11  Native Overlay Diff: true
12 Logging Driver: journald 13 Cgroup Driver: systemd 14 Plugins: 15  Volume: local 16  Network: bridge host macvlan null overlay 17 Swarm: inactive 18 Runtimes: docker-runc runc 19 Default Runtime: docker-runc 20 Init Binary: /usr/libexec/docker/docker-init-current 21 containerd version: (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1) 22 runc version: 5eda6f6fd0c2884c2c8e78a6e7119e8d0ecedb77 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f) 23 init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574) 24 Security Options: 25  seccomp 26   WARNING: You're not using the default seccomp profile
27   Profile: /etc/docker/seccomp.json 28  selinux 29 Kernel Version: 3.10.0-693.el7.x86_64 30 Operating System: CentOS Linux 7 (Core) 31 OSType: linux 32 Architecture: x86_64 33 Number of Docker Hooks: 3
34 CPUs: 1
35 Total Memory: 976.3 MiB 36 Name: foryou 37 ID: PDBR:ERBZ:UNRZ:Y7K7:6KIJ:42WU:SXPE:3CBU:CKYV:UFRA:636A:3FBJ 38 Docker Root Dir: /var/lib/docker 39 Debug Mode (client): false
40 Debug Mode (server): false
41 Registry: https://index.docker.io/v1/
42 Experimental: false
43 Insecure Registries: 44  127.0.0.0/8
45 Live Restore Enabled: false
46 Registries: docker.io (secure)
View Code
  • 搜索 images
 1 [root@foryou ~]# docker search centos #从 Docker Hub 中搜索符合条件的镜像。  2 INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED  3 docker.io   docker.io/centos                             The official build of CentOS.                   4529 [OK]  4 docker.io   docker.io/ansible/centos7-ansible            Ansible on Centos7                              114 [OK]  5 docker.io   docker.io/jdeathe/centos-ssh                 CentOS-6 6.9 x86_64 / CentOS-7 7.4.1708 x8...   98 [OK]  6 docker.io   docker.io/consol/centos-xfce-vnc             Centos container with "headless" VNC sessi...   58 [OK]  7 docker.io   docker.io/imagine10255/centos6-lnmp-php56    centos6-lnmp-php56                              44 [OK]  8 docker.io   docker.io/tutum/centos                       Simple CentOS docker image with SSH access      43                   
 9 docker.io   docker.io/centos/mysql-57-centos7            MySQL 5.7 SQL database server                   35                   
10 docker.io   docker.io/gluster/gluster-centos             Official GlusterFS Image [ CentOS-7 +  Glu...   31 [OK] 11 docker.io   docker.io/openshift/base-centos7             A Centos7 derived base image for Source-To...   30                   
12 docker.io   docker.io/centos/python-35-centos7           Platform for building and running Python 3...   27                   
13 docker.io   docker.io/centos/postgresql-96-centos7       PostgreSQL is an advanced Object-Relationa...   24                   
14 docker.io   docker.io/kinogmt/centos-ssh                 CentOS with SSH                                 21 [OK] 15 docker.io   docker.io/openshift/jenkins-2-centos7        A Centos7 based Jenkins v2.x image for use...   14                   
16 docker.io   docker.io/centos/httpd-24-centos7            Platform for running Apache httpd 2.4 or b...   13                   
17 docker.io   docker.io/openshift/mysql-55-centos7         DEPRECATED: A Centos7 based MySQL v5.5 ima...   6                    
18 docker.io   docker.io/pivotaldata/centos-gpdb-dev        CentOS image for GPDB development. Tag nam...   6                    
19 docker.io   docker.io/openshift/jenkins-1-centos7        DEPRECATED: A Centos7 based Jenkins v1.x i...   4                    
20 docker.io   docker.io/darksheer/centos                   Base Centos Image -- Updated hourly             3 [OK] 21 docker.io   docker.io/openshift/wildfly-101-centos7      A Centos7 based WildFly v10.1 image for us...   3                    
22 docker.io   docker.io/pivotaldata/centos                 Base centos, freshened up a little with a ...   2                    
23 docker.io   docker.io/blacklabelops/centos               CentOS Base Image! Built and Updates Daily!     1 [OK] 24 docker.io   docker.io/pivotaldata/centos-mingw           Using the mingw toolchain to cross-compile...   1                    
25 docker.io   docker.io/jameseckersall/sonarr-centos       Sonarr on CentOS 7                              0 [OK] 26 docker.io   docker.io/pivotaldata/centos-gcc-toolchain   CentOS with a toolchain, but unaffiliated ...   0                    
27 docker.io   docker.io/smartentry/centos                  centos with smartentry                          0 [OK] 28 [root@foryou ~]# 
View Code
方法 1:从公网 docker hub 拉取(下载)image pull:拉
1 [root@foryou ~]# docker pull centos 2 Using default tag: latest 3 Trying to pull repository docker.io/library/centos ... 4 latest: Pulling from docker.io/library/centos 5 7dc0dca2b151: Pull complete 6 Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322 7 Status: Downloaded newer image for docker.io/centos:latest
注意:若果报错的话,多是因为网络问题,没法链接到dockerhub下载镜像。
解决办法:换一个docker下载地址;
1 [root@foryou ~]# vim /etc/docker/daemon.json # 修改如下内容: 2  改{}: 3  为: 4 { 5     'registry-mirrors':['https://docker.mirrors.ustc.deu.cn'] 6 }
方法 2:把以前下载好的 image 镜像导入 image:
把 centos-latest-docker-image.tar 镜像上传到 linux 上
参数: -i " centos-latest-docker-image.tar "指定载入的镜像归档。
1 [root@foryou ~]# docker load -i /root/centos-latest-docker-image.tar
  • 查看 images 列表
1 [root@foryou ~]# docker images 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB
注:Docker 的镜像以及一些数据都是在/var/lib/docker 目彔下
 1 [root@foryou ~]# du -sh /var/lib/docker/*
 2 0 /var/lib/docker/containers  3 652K /var/lib/docker/image  4 32K /var/lib/docker/network  5 208M /var/lib/docker/overlay2  6 0 /var/lib/docker/plugins  7 0 /var/lib/docker/swarm  8 0 /var/lib/docker/tmp  9 0 /var/lib/docker/trust 10 24K /var/lib/docker/volumes

三 docker 平台基本使用方法

例 1:运行一个 container 并加载镜像 centos,运行起来这个实例后,在实例中执行 /bin/bash 命令
docker 经常使用参数:
run 运行
-i 以交互模式运行容器,一般与 -t 同时使用;
-t 为容器从新分配一个伪输入终端,一般与 -i 同时使用;
 1 [root@foryou overlay2]# docker images # 查看镜像  2 REPOSITORY TAG IMAGE ID CREATED SIZE  3 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB  4 [root@foryou overlay2]# docker run -it docker.io/centos:latest  /bin/bash  5 [root@5c28682aa834 /]# ls # 查看实例环境  6 bin  dev  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
 7 [root@5c28682aa834 /]# cat /etc/centos-release  8 CentOS Linux release 7.5.1804 (Core)  9 [root@5c28682aa834 /]# exit # 注意:退出容器 10 exit 11 [root@foryou overlay2]# 
 例 2:在 container 中启劢一个长久运行的进程,不断向 stdin 输出 foryouzxl
docker 经常使用参数:
-d 后台运行容器,并返回容器 ID;
-c 后面跟待完成的命令
1 [root@foryou overlay2]# JOB=$(docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo foryouzxl;sleep 1;done") 2 [root@foryou overlay2]# echo $JOB # 变量IOB中存放着Name/ID 3 4b5068f11f3e2626506deb2c414bf37a3d2261961081ac536f31ef0ffc58f608
  • 从一个容器中取日志,查看输出的内容
  语法: docker logs 容器实例的 Name/ID
1 [root@foryou overlay2]# docker logs 4b5068f11f 2 foryouzxl 3 foryouzxl 4 foryouzxl 5 ……
  • 查看正在运行的容器:
1 [root@foryou overlay2]# docker ps #列出全部运行中容器。 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   4 minutes ago       Up 4 minutes dreamy_tesla 4 [root@foryou overlay2]# docker ps -a # -a 列出全部容器(包含沉睡/退出状态的容器); 5 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   5 minutes ago       Up 5 minutes dreamy_tesla 7 5c28682aa834        docker.io/centos:latest   "/bin/bash"              11 minutes ago      Exited (0) 11 minutes ago laughing_fermi 8 [root@foryou overlay2]# 
也可使用短 ID 或 docker 实例的名字查看日志输出:
1 root@foryou overlay2]# docker logs dreamy_tesla 2 或者 3 [root@foryou overlay2]# docker logs 4b5068f11f
例 3:杀死一个容器。 好比:杀死一个正在后台运行的容器
查看要杀死容器的 ID
1 [root@foryou overlay2]# docker ps -a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   9 minutes ago       Up 9 minutes dreamy_tesla 4 5c28682aa834        docker.io/centos:latest   "/bin/bash"              16 minutes ago      Exited (0) 16 minutes ago                       laughing_fermi
杀死 ID 为4b5068f11f3e 的容器:
1 [root@foryou overlay2]# docker kill 4b5068f11f3e 2 4b5068f11f3e 3 或者 4 [root@foryou overlay2]# docker kill $JOB
查看结果:
1 [root@foryou overlay2]# docker ps -a 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   12 minutes ago      Exited (137) About a minute ago dreamy_tesla 4 5c28682aa834        docker.io/centos:latest   "/bin/bash"              19 minutes ago      Exited (0) 19 minutes ago                             laughing_fermi
例 4:启劢、中止、重启 container 容器实例
 1 # 启动一个实例 启动:run #建立并运行docker实例  2 [root@foryou overlay2]# JOB=$(docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo lovezxl;sleep 1;done")  3 [root@foryou overlay2]# echo $JOB  4 c40ed75378a89b79d9bf5418ef799b22c76c2ec46a1fff4bda84a7d56ce2d97e  5 [root@foryou overlay2]# docker ps  6 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES  7 c40ed75378a8        docker.io/centos:latest   "/bin/bash -c 'whi..."   18 seconds ago      Up 18 seconds xenodochial_varahamihira  8 [root@foryou overlay2]# docker stop c40ed75378a8 # 中止一个实例  9 c40ed75378a8 10 [root@foryou overlay2]# docker ps -a 11 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 12 c40ed75378a8        docker.io/centos:latest   "/bin/bash -c 'whi..."   About a minute ago   Exited (137) 7 seconds ago xenodochial_varahamihira 13 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   16 minutes ago       Exited (137) 5 minutes ago dreamy_tesla 14 5c28682aa834        docker.io/centos:latest   "/bin/bash"              23 minutes ago       Exited (0) 22 minutes ago laughing_fermi 15 [root@foryou overlay2]# docker start c40ed75378a8 # 启动一个实例 16 c40ed75378a8 17 [root@foryou overlay2]# docker ps -a 18 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 19 c40ed75378a8        docker.io/centos:latest   "/bin/bash -c 'whi..."   About a minute ago   Up 3 seconds xenodochial_varahamihira 20 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   17 minutes ago       Exited (137) 5 minutes ago dreamy_tesla 21 5c28682aa834        docker.io/centos:latest   "/bin/bash"              23 minutes ago       Exited (0) 23 minutes ago laughing_fermi 22 [root@foryou overlay2]# docker restart c40ed75378a8 # 重启一个实例 23 c40ed75378a8 24 [root@foryou overlay2]# docker ps -a 25 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 26 c40ed75378a8        docker.io/centos:latest   "/bin/bash -c 'whi..."   2 minutes ago       Up 4 seconds xenodochial_varahamihira 27 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   17 minutes ago      Exited (137) 6 minutes ago dreamy_tesla 28 5c28682aa834        docker.io/centos:latest   "/bin/bash"              24 minutes ago      Exited (0) 23 minutes ago                        laughing_fermi
View Code
删除容器实例:rm
1 [root@foryou overlay2]# docker rm -f c40ed75378a8 2 c40ed75378a8 3 [root@foryou overlay2]# docker ps -a 4 CONTAINER ID IMAGE COMMAND CREATED STATUS 5 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   22 minutes ago      Exited (137) 10 mi 6 5c28682aa834        docker.io/centos:latest   "/bin/bash"              28 minutes ago      Exited (0) 28 minu
注意:你能够先把容器实例 关闭,而后再删除或加-f 强制删除

四 建立docker镜像和发布镜像方法

方法 1:docker commit #保存 container 的当前状态到 image 后,而后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自动化制做 image
 
方法 1:docker commit
建立一个安装好 apache工具的容器镜像:
1 [root@foryou overlay2]# docker run -it centos /bin/bash 2 [root@cd65e6d76036 /]# yum -y install httpd #在 container 中安装 apache 软件包 3 …… 4 Complete!
查看镜像列表:(注:当前只有一个 image centos)
1 [root@foryou overlay2]# docker images 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB
根据容器当前状态作一个 image 镜像:建立一个安装了 apache工具的 centos 镜像
语法: docker commit <container 的 ID> <image_name>
例:
查看容器 ID:
 1 [root@foryou overlay2]# docker ps -a  2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES  3 cd65e6d76036        centos                    "/bin/bash"              4 minutes ago       Exited (0) About a minute ago wizardly_davinci  4 4b5068f11f3e        docker.io/centos:latest   "/bin/bash -c 'whi..."   35 minutes ago      Exited (137) 24 minutes ago dreamy_tesla  5 5c28682aa834        docker.io/centos:latest   "/bin/bash"              42 minutes ago      Exited (0) 41 minutes ago laughing_fermi  6 [root@foryou overlay2]# docker commit cd65e6d76036 centos:apache  7 sha256:7ca4fb9d37b045798f635056adb08c38cffed250a8ed2554e7eca5f9b52c0dc0  8 [root@foryou overlay2]# docker images  9 REPOSITORY TAG IMAGE ID CREATED SIZE 10 centos              apache              7ca4fb9d37b0        19 seconds ago      319 MB 11 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB
使用新建立的 centos:apache 镜像,生成一台容器实例:
1 [root@foryou overlay2]# docker run -it centos:apache /bin/bash 2 [root@2d7f99899a9f /]# rpm -qa httpd #已经安装好 apache命令 3 httpd-2.4.6-80.el7.centos.1.x86_64 4 [root@2d7f99899a9f /]# 5 注:说明基于 apache镜像的容器建立成功。
方法二:经过:docker build 建立一个基于 centos 的 httpd web 服务器镜像。
尝试第二种建立 docker image 方法:建立 docker build #使用 Dockerfile 自动化制做 image
注:Dockerfile 有点像源码编译时./configure 后产生的 Makefile
如下操做要在 docker 物理机上操做:
一、 建立工做目彔
1 [root@2d7f99899a9f /]# mkdir /docker-build 2 [root@2d7f99899a9f /]# cd !$ 3 cd /docker-build 4 [root@2d7f99899a9f docker-build]# touch Dockerfile 5 [root@2d7f99899a9f docker-build]# 6 注: make 自动化编译时须要 Makefile 文件,自动化建立 docker 镜像时,须要 Dockerfile
二、 编辑 Dockerfile
Dockerfile 用来建立一个自定义的 image,包含了用户指定的软件依赖等。
1 [root@2d7f99899a9f docker-build]# vi Dockerfile 2 FROM centos 3 MAINTAINER <hg@foryou.com>
4 RUN yum -y install httpd 5 ADD start.sh /usr/local/bin/start.sh 6 ADD index.html /var/www/html/index.html
注释:
FROM centos # FROM 基于哪一个镜像
MAINTAINER <hg@foryou.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 服务和 apache 默认首页 index.html 文件
 1 [root@2d7f99899a9f docker-build]# echo "/usr/sbin/httpd -DFORCEGROUND" > start.sh  2 [root@2d7f99899a9f docker-build]# ls  3 Dockerfile start.sh  4 [root@2d7f99899a9f docker-build]# chmod a+x start.sh  5 注:/usr/sbin/httpd -DFOREGROUND 至关于执行了 systemctl start httpd  6 建立 index.html  7 [root@2d7f99899a9f docker-build]# echo "docker image build test" > index.html  8 [root@2d7f99899a9f docker-build]# ls  9 Dockerfile index.html start.sh 10 [root@2d7f99899a9f docker-build]# chmod a+x index.html 11 [root@2d7f99899a9f docker-build]# 
四、 使用命令 build 来建立新的 image
语法:docker build -t 父镜像名:本身定义的镜像名 Dockerfile 文件所在路径
-t :表示 tage,镜像名
 1 [root@foryou docker-build]# docker build -t centos:httpd ./
 2 Sending build context to Docker daemon 4.096 kB  3 Step 1/5 : FROM centos  4  ---> 49f7960eb7e4  5 Step 2/5 : MAINTAINER <hg@foryou.com>
 6  ---> Running in fde5a706d822  7  ---> e1a79980083b  8 Removing intermediate container fde5a706d822  9 Step 3/5 : RUN yum -y install httpd 10  ---> Running in e50882f46945 11  ---> e6ad6ba7471a 12 Removing intermediate container e50882f46945 13 Step 4/5 : ADD start.sh /usr/local/bin/start.sh 14  ---> ae384e75f303 15 Removing intermediate container c340a156939f 16 Step 5/5 : ADD index.html /var/www/html/index.html 17  ---> 98af80c193da 18 Removing intermediate container fde9a4c41a2c 19 Successfully built 98af80c193da 20 [root@foryou docker-build]# 
查看images列表:
1 [root@foryou ~]# docker images 2 REPOSITORY TAG IMAGE ID CREATED SIZE 3 centos              httpd               98af80c193da        About a minute ago   319 MB 4 centos              apache              7ca4fb9d37b0        43 minutes ago       319 MB 5 docker.io/centos    latest              49f7960eb7e4        2 months ago         200 MB 6 注:docker 镜像=应用/程序+库
  • Docker Image 的发布:    
方法 1:Save Image To TarBall
方法 2:Push Image To Docker Hub
 
方法 1:Save Image To TarBall
保存 Image 到 tar 包
语法:docker save -o 导出的镜像名.tar 本地镜像名:镜像标签
例:
1 [root@foryou docker-build]# docker save -o centos7.4-httpd-docker-image.tar centos:httpd 2 [root@foryou docker-build]# ls # 查看导出成功 3 centos7.4-httpd-docker-image.tar  Dockerfile  index.html  start.sh
例: 使用导入本地镜像:
 1 [root@foryou docker-build]# docker images #查看目前存在的镜像为3个  2 REPOSITORY TAG IMAGE ID CREATED SIZE  3 centos              httpd               98af80c193da        14 minutes ago      319 MB  4 centos              apache              7ca4fb9d37b0        56 minutes ago      319 MB  5 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB  6 [root@foryou docker-build]# docker rmi centos:httpd # 先删除本地docker镜像,再导入:  7 Untagged: centos:httpd  8 Deleted: sha256:98af80c193da2361e45e1009aa258c7b88d0f4e508257825d0cec058c58f3357  9 Deleted: sha256:6f60d1fb621514bfb0996de921b6f4be58b5c6b1bf2d4f5bc1fd9c87da57b7b6 10 Deleted: sha256:ae384e75f303e82332d6fad55ea3e92377c0ecf4b3fbedaac55866683200660e 11 Deleted: sha256:b2bf86c2aba2e34cb4d9024af24e292695a2a3b54f641ce0113f3a5b199ecf94 12 Deleted: sha256:e6ad6ba7471a1e2621d1d7a42726dc024f2570fb9a7ff1e3c79dc3bf7750dfeb 13 Deleted: sha256:cb8e35f16eb44743ae67862df17775579ef12dd73e1e1945f9096b180aa11377 14 Deleted: sha256:e1a79980083b62c6b82cfd1723ad159dbbee9a5ed82efb59b8b5c4a60734a839 15 [root@foryou docker-build]# docker images 16 REPOSITORY TAG IMAGE ID CREATED SIZE 17 centos              apache              7ca4fb9d37b0        56 minutes ago      319 MB 18 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB 19 [root@foryou docker-build]# docker load -i centos7.4-httpd-docker-image.tar 20 20d32b6c5508: Loading layer 120.3 MB/120.3 MB 21 d0cc030e6789: Loading layer 3.584 kB/3.584 kB 22 6799305b3e81: Loading layer 3.584 kB/3.584 kB 23 Loaded image: centos:httpd 24 [root@foryou docker-build]# docker images 25 REPOSITORY TAG IMAGE ID CREATED SIZE 26 centos              httpd               98af80c193da        15 minutes ago      319 MB 27 centos              apache              7ca4fb9d37b0        57 minutes ago      319 MB 28 docker.io/centos    latest              49f7960eb7e4        2 months ago        200 MB
View Code
方法 2:Push Image To Docker Hub 发布到外网(国外的网站)--也能够利用阿里云的docker仓库
一、 Signup on docker hub & create repo 注册一个账号
https://hub.docker.com/
二、 Login to docker hub
# docker login -u userabc -p abc123 -e userab@gmail.com
三、 Push image to docker hub #上传镜像
# docker push centos:httpd
四、 Pull image from docker hub #下载镜像
# docker pull userabc/centos:httpd
用户名/镜像名

五 Container 容器端口映射

启动container:
1 [root@foryou docker-build]# docker run -d -p 9000:80 centos:httpd /bin/bash -c /usr/local/bin/start.sh 2 8ad27fc50c16b84f51739b7f467c94555343f793409605188819c6ddf81edd48 3 注: -p 9000:80 把容器中的 80 端口映射到物理机上的 9000 端口
查看物理机和容器的网络:
查看容器的IP:
1 [root@foryou docker-build]# docker run -it centos /bin/bash 2 [root@7a04ac0dcac7 /]# yum install net-tools -y 3 [root@7a04ac0dcac7 /]# ifconfig 4 eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
5         inet 172.17.0.2  netmask 255.255.0.0  broadcast 0.0.0.0
物理机的IP:
 1 [root@foryou ~]# ifconfig  2 docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500 # 注:至关于虚拟机的 NAT 网络模式  3         inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
 4         inet6 fe80::42:75ff:fed2:5eb6  prefixlen 64  scopeid 0x20<link>
 5         ether 02:42:75:d2:5e:b6  txqueuelen 0 (Ethernet)  6         RX packets 25519  bytes 1036458 (1012.1 KiB)  7         RX errors 0  dropped 0  overruns 0  frame 0
 8         TX packets 37131  bytes 86561010 (82.5 MiB)  9         TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
10 
11 ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
12         inet 192.168.10.1  netmask 255.255.255.0  broadcast 192.168.10.255
测试网络:
1 [root@7a04ac0dcac7 /]# route -n 2 Kernel IP routing table 3 Destination Gateway Genmask Flags Metric Ref Use Iface 4 0.0.0.0         172.17.0.1      0.0.0.0         UG    0      0        0 eth0 5 172.17.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0 6 [root@7a04ac0dcac7 /]# ping 192.168.10.1
7 PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data. 8 64 bytes from 192.168.10.1: icmp_seq=1 ttl=64 time=0.068 ms 9 64 bytes from 192.168.10.1: icmp_seq=2 ttl=64 time=0.101 ms
 The end!
**************************************************************************************************
                                                        Good lucky to you
**************************************************************************************************
相关文章
相关标签/搜索