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

时间:2021-11-16 07:33:08

实验所涉内容

  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/

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

  • 源代码下载:https://github.com/docker/docker

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

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

  相同点: docker 容器技术和虚拟机技术,都是虚拟化技术。 

  【linxu】部署docker容器虚拟化平台      
  总结:docker 相对于 VM 虚拟机,少了虚拟机操作系统这一层,所以 docker 效率比虚拟机高。你的物理系统启劢使用几秒?10 秒  而在 docker 上启劢一个实例 1-2 秒
  • Docker 架构

  【linxu】部署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
  【linxu】部署docker容器虚拟化平台
  缺点局限性:
  1.Docker 用于应用程序时是最有用的,但并不包含数据。日志,跟踪和数据库等通常应放在 Docker 容器外。 一个容器的镜像通常都很小,不适合存大量数据,存储可以通过外部挂载的方式使用。比如使用:NFS,  ipsan,MFS 等。一句话:docker 只用于计算,存储交给别人。

二 部署 docker 容器虚拟化平台

       注: 想使用此 docker yum 源,需要使用 RHEL7.3 版本以后系统。 
  • 初始环境:RHEL7.4 64 位,虚拟机可上外网(NAT模式),ip为192.168.10.1/24,默认yum源不用配置:
 [base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=
enabled=
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(一般不会出现问题)
  【linxu】部署docker容器虚拟化平台
  • 查看rpm软件下载后的存放位置:
 [root@foryou ~]# ls /var/cache/yum/x86_64//extras/packages/
container-selinux-2.66-.el7.noarch.rpm oci-register-machine--.git2b44233.el7.x86_64.rpm
container-storage-setup-0.10.-.gitdf0dcd5.el7.noarch.rpm oci-systemd-hook-0.1.-.git05bd9a0.el7.x86_64.rpm
docker-1.13.-.gitdded712.el7.centos.x86_64.rpm oci-umount-2.3.-.gite3c9055.el7.x86_64.rpm
docker-client-1.13.-.gitdded712.el7.centos.x86_64.rpm skopeo-containers-0.1.-.dev.gitae64ff7.el7.centos.x86_64.rpm
docker-common-1.13.-.gitdded712.el7.centos.x86_64.rpm
[root@foryou ~]# ls /var/cache/yum/x86_64//extras/packages/ | wc -l
  • 开启路由转发功能,否则容器中的实例上不了网:
 [root@foryou ~]# vim /etc/sysctl.conf #在文件最后添加,以一下红色标记内容
net.ipv4.ip_forward =
[root@foryou ~]# sysctl -p #使用配置生效
net.ipv4.ip_forward =
[root@foryou ~]# /etc/init.d/network restart # 重启网络使其生效
Restarting network (via systemctl): [ OK ]
[root@foryou ~]# cat /proc/sys/net/ipv4/ip_forward #查看
  • 启动docker平台
 [root@foryou ~]# systemctl start docker # 启动docker服务
[root@foryou ~]# systemctl enable docker # 设置开机启动docker服务
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /usr/lib/systemd/system/docker.service.
[root@foryou ~]# docker version # 显示docker版本信息

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

  • 查看 docker 信息(确认服务运行)显示 Docker 系统信息,包括镜像和容器数。
 [root@foryou ~]# docker info
Containers:
Running:
Paused:
Stopped:
Images:
Server Version: 1.13.
Storage Driver: overlay2
Backing Filesystem: xfs # 文件系统为xfs
Supports d_type: true
Native Overlay Diff: true
Logging Driver: journald
Cgroup Driver: systemd
Plugins:
Volume: local
Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: docker-runc runc
Default Runtime: docker-runc
Init Binary: /usr/libexec/docker/docker-init-current
containerd version: (expected: aa8187dbd3b7ad67d8e5e3a15115d3eef43a7ed1)
runc version: 5eda6f6fd0c2884c2c8e78a6e7119e8d0ecedb77 (expected: 9df8b306d01f59d3a8029be411de015b7304dd8f)
init version: fec3683b971d9c3ef73f284f176672c44b448662 (expected: 949e6facb77383876aeff8a6944dde66b3089574)
Security Options:
seccomp
WARNING: You're not using the default seccomp profile
Profile: /etc/docker/seccomp.json
selinux
Kernel Version: 3.10.-.el7.x86_64
Operating System: CentOS Linux (Core)
OSType: linux
Architecture: x86_64
Number of Docker Hooks:
CPUs:
Total Memory: 976.3 MiB
Name: foryou
ID: PDBR:ERBZ:UNRZ:Y7K7:6KIJ:42WU:SXPE:3CBU:CKYV:UFRA:636A:3FBJ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
127.0.0.0/
Live Restore Enabled: false
Registries: docker.io (secure)
  • 搜索 images
 [root@foryou ~]# docker search centos #从 Docker Hub 中搜索符合条件的镜像。
INDEX NAME DESCRIPTION STARS OFFICIAL AUTOMATED
docker.io docker.io/centos The official build of CentOS. [OK]
docker.io docker.io/ansible/centos7-ansible Ansible on Centos7 [OK]
docker.io docker.io/jdeathe/centos-ssh CentOS- 6.9 x86_64 / CentOS- 7.4. x8... [OK]
docker.io docker.io/consol/centos-xfce-vnc Centos container with "headless" VNC sessi... [OK]
docker.io docker.io/imagine10255/centos6-lnmp-php56 centos6-lnmp-php56 [OK]
docker.io docker.io/tutum/centos Simple CentOS docker image with SSH access
docker.io docker.io/centos/mysql--centos7 MySQL 5.7 SQL database server
docker.io docker.io/gluster/gluster-centos Official GlusterFS Image [ CentOS- + Glu... [OK]
docker.io docker.io/openshift/base-centos7 A Centos7 derived base image for Source-To...
docker.io docker.io/centos/python--centos7 Platform for building and running Python ...
docker.io docker.io/centos/postgresql--centos7 PostgreSQL is an advanced Object-Relationa...
docker.io docker.io/kinogmt/centos-ssh CentOS with SSH [OK]
docker.io docker.io/openshift/jenkins--centos7 A Centos7 based Jenkins v2.x image for use...
docker.io docker.io/centos/httpd--centos7 Platform for running Apache httpd 2.4 or b...
docker.io docker.io/openshift/mysql--centos7 DEPRECATED: A Centos7 based MySQL v5. ima...
docker.io docker.io/pivotaldata/centos-gpdb-dev CentOS image for GPDB development. Tag nam...
docker.io docker.io/openshift/jenkins--centos7 DEPRECATED: A Centos7 based Jenkins v1.x i...
docker.io docker.io/darksheer/centos Base Centos Image -- Updated hourly [OK]
docker.io docker.io/openshift/wildfly--centos7 A Centos7 based WildFly v10. image for us...
docker.io docker.io/pivotaldata/centos Base centos, freshened up a little with a ...
docker.io docker.io/blacklabelops/centos CentOS Base Image! Built and Updates Daily! [OK]
docker.io docker.io/pivotaldata/centos-mingw Using the mingw toolchain to cross-compile...
docker.io docker.io/jameseckersall/sonarr-centos Sonarr on CentOS [OK]
docker.io docker.io/pivotaldata/centos-gcc-toolchain CentOS with a toolchain, but unaffiliated ...
docker.io docker.io/smartentry/centos centos with smartentry [OK]
[root@foryou ~]#

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

 [root@foryou ~]# docker pull centos
Using default tag: latest
Trying to pull repository docker.io/library/centos ...
latest: Pulling from docker.io/library/centos
7dc0dca2b151: Pull complete
Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
Status: Downloaded newer image for docker.io/centos:latest
注意:若果报错的话,可能是由于网络问题,无法连接到dockerhub下载镜像。
解决办法:换一个docker下载地址;
 [root@foryou ~]# vim /etc/docker/daemon.json # 修改以下内容:
改{}:
为:
{
'registry-mirrors':['https://docker.mirrors.ustc.deu.cn']
}

方法 2:把之前下载好的 image 镜像导入 image:
把 centos-latest-docker-image.tar 镜像上传到 linux 上
参数: -i " centos-latest-docker-image.tar "指定载入的镜像归档。

 [root@foryou ~]# docker load -i /root/centos-latest-docker-image.tar
  • 查看 images 列表
 [root@foryou ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 49f7960eb7e4 months ago MB

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

 [root@foryou ~]# du -sh /var/lib/docker/*
0 /var/lib/docker/containers
652K /var/lib/docker/image
32K /var/lib/docker/network
208M /var/lib/docker/overlay2
0 /var/lib/docker/plugins
0 /var/lib/docker/swarm
0 /var/lib/docker/tmp
0 /var/lib/docker/trust
24K /var/lib/docker/volumes

三 docker 平台基本使用方法

例 1:运行一个 container 并加载镜像 centos,运行起来这个实例后,在实例中执行 /bin/bash 命令
docker 常用参数:
run 运行
-i 以交互模式运行容器,通常与 -t 同时使用;
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
 [root@foryou overlay2]# docker images # 查看镜像
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 49f7960eb7e4 months ago MB
[root@foryou overlay2]# docker run -it docker.io/centos:latest /bin/bash
[root@5c28682aa834 /]# ls # 查看实例环境
bin dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@5c28682aa834 /]# cat /etc/centos-release
CentOS Linux release 7.5. (Core)
[root@5c28682aa834 /]# exit # 注意:退出容器
exit
[root@foryou overlay2]#

例 2:在 container 中启劢一个长久运行的进程,不断向 stdin 输出 foryouzxl
docker 常用参数:
-d 后台运行容器,并返回容器 ID;
-c 后面跟待完成的命令

 [root@foryou overlay2]# JOB=$(docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo foryouzxl;sleep 1;done")
[root@foryou overlay2]# echo $JOB # 变量IOB中存放着Name/ID
4b5068f11f3e2626506deb2c414bf37a3d2261961081ac536f31ef0ffc58f608
  • 从一个容器中取日志,查看输出的内容

  语法: docker logs 容器实例的 Name/ID

 [root@foryou overlay2]# docker logs 4b5068f11f
foryouzxl
foryouzxl
foryouzxl
……
  • 查看正在运行的容器:
 [root@foryou overlay2]# docker ps #列出所有运行中容器。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Up minutes dreamy_tesla
[root@foryou overlay2]# docker ps -a # -a 列出所有容器(包含沉睡/退出状态的容器);
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Up minutes dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi
[root@foryou overlay2]#

也可以使用短 ID 或 docker 实例的名字查看日志输出:

 root@foryou overlay2]# docker logs dreamy_tesla
或者
[root@foryou overlay2]# docker logs 4b5068f11f
例 3:杀死一个容器。 比如:杀死一个正在后台运行的容器
查看要杀死容器的 ID:
 [root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Up minutes dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi

杀死 ID 为4b5068f11f3e 的容器:

 [root@foryou overlay2]# docker kill 4b5068f11f3e
4b5068f11f3e
或者
[root@foryou overlay2]# docker kill $JOB

查看结果:

 [root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () About a minute ago dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi

例 4:启劢、停止、重启 container 容器实例

 # 启动一个实例 启动:run #创建并运行docker实例
[root@foryou overlay2]# JOB=$(docker run -d docker.io/centos:latest /bin/bash -c "while true;do echo lovezxl;sleep 1;done")
[root@foryou overlay2]# echo $JOB
c40ed75378a89b79d9bf5418ef799b22c76c2ec46a1fff4bda84a7d56ce2d97e
[root@foryou overlay2]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c40ed75378a8 docker.io/centos:latest "/bin/bash -c 'whi..." seconds ago Up seconds xenodochial_varahamihira
[root@foryou overlay2]# docker stop c40ed75378a8 # 停止一个实例
c40ed75378a8
[root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c40ed75378a8 docker.io/centos:latest "/bin/bash -c 'whi..." About a minute ago Exited () seconds ago xenodochial_varahamihira
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () minutes ago dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi
[root@foryou overlay2]# docker start c40ed75378a8 # 启动一个实例
c40ed75378a8
[root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c40ed75378a8 docker.io/centos:latest "/bin/bash -c 'whi..." About a minute ago Up seconds xenodochial_varahamihira
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () minutes ago dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi
[root@foryou overlay2]# docker restart c40ed75378a8 # 重启一个实例
c40ed75378a8
[root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c40ed75378a8 docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Up seconds xenodochial_varahamihira
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () minutes ago dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi

删除容器实例:rm

 [root@foryou overlay2]# docker rm -f c40ed75378a8
c40ed75378a8
[root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () mi
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minu
注意:你可以先把容器实例 关闭,然后再删除或加-f 强制删除

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

方法 1:docker commit #保存 container 的当前状态到 image 后,然后生成对应的 image
方法 2:docker build #使用 Dockerfile 文件自动化制作 image
 
方法 1:docker commit
创建一个安装好 apache工具的容器镜像:
 [root@foryou overlay2]# docker run -it centos /bin/bash
[root@cd65e6d76036 /]# yum -y install httpd #在 container 中安装 apache 软件包
……
Complete!

查看镜像列表:(注:当前只有一个 image centos)

 [root@foryou overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/centos latest 49f7960eb7e4 months ago MB

根据容器当前状态做一个 image 镜像:创建一个安装了 apache工具的 centos 镜像
语法: docker commit <container 的 ID> <image_name>
例:
查看容器 ID:

 [root@foryou overlay2]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cd65e6d76036 centos "/bin/bash" minutes ago Exited () About a minute ago wizardly_davinci
4b5068f11f3e docker.io/centos:latest "/bin/bash -c 'whi..." minutes ago Exited () minutes ago dreamy_tesla
5c28682aa834 docker.io/centos:latest "/bin/bash" minutes ago Exited () minutes ago laughing_fermi
[root@foryou overlay2]# docker commit cd65e6d76036 centos:apache
sha256:7ca4fb9d37b045798f635056adb08c38cffed250a8ed2554e7eca5f9b52c0dc0
[root@foryou overlay2]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos apache 7ca4fb9d37b0 seconds ago MB
docker.io/centos latest 49f7960eb7e4 months ago MB

使用新创建的 centos:apache 镜像,生成一台容器实例:

 [root@foryou overlay2]# docker run -it centos:apache /bin/bash
[root@2d7f99899a9f /]# rpm -qa httpd #已经安装好 apache命令
httpd-2.4.-.el7.centos..x86_64
[root@2d7f99899a9f /]#
注:说明基于 apache镜像的容器创建成功。

方法二:通过:docker build 创建一个基于 centos 的 httpd web 服务器镜像。
尝试第二种创建 docker image 方法:创建 docker build #使用 Dockerfile 自动化制作 image
注:Dockerfile 有点像源码编译时./configure 后产生的 Makefile
以下操作要在 docker 物理机上操作:
1、 创建工作目彔

 [root@2d7f99899a9f /]# mkdir /docker-build
[root@2d7f99899a9f /]# cd !$
cd /docker-build
[root@2d7f99899a9f docker-build]# touch Dockerfile
[root@2d7f99899a9f docker-build]#
注: make 自动化编译时需要 Makefile 文件,自动化创建 docker 镜像时,需要 Dockerfile
2、 编辑 Dockerfile
Dockerfile 用来创建一个自定义的 image,包含了用户指定的软件依赖等。
 [root@2d7f99899a9f docker-build]# vi Dockerfile
FROM centos
MAINTAINER <hg@foryou.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 基于哪个镜像
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
3、 创建 start.sh 脚本启动 httpd 服务和 apache 默认首页 index.html 文件
 [root@2d7f99899a9f docker-build]# echo "/usr/sbin/httpd -DFORCEGROUND" > start.sh
[root@2d7f99899a9f docker-build]# ls
Dockerfile start.sh
[root@2d7f99899a9f docker-build]# chmod a+x start.sh
注:/usr/sbin/httpd -DFOREGROUND 相当于执行了 systemctl start httpd
创建 index.html
[root@2d7f99899a9f docker-build]# echo "docker image build test" > index.html
[root@2d7f99899a9f docker-build]# ls
Dockerfile index.html start.sh
[root@2d7f99899a9f docker-build]# chmod a+x index.html
[root@2d7f99899a9f docker-build]#
4、 使用命令 build 来创建新的 image
语法:docker build -t 父镜像名:自己定义的镜像名 Dockerfile 文件所在路径
-t :表示 tage,镜像名
 [root@foryou docker-build]# docker build -t centos:httpd ./
Sending build context to Docker daemon 4.096 kB
Step / : FROM centos
---> 49f7960eb7e4
Step / : MAINTAINER <hg@foryou.com>
---> Running in fde5a706d822
---> e1a79980083b
Removing intermediate container fde5a706d822
Step / : RUN yum -y install httpd
---> Running in e50882f46945
---> e6ad6ba7471a
Removing intermediate container e50882f46945
Step / : ADD start.sh /usr/local/bin/start.sh
---> ae384e75f303
Removing intermediate container c340a156939f
Step / : ADD index.html /var/www/html/index.html
---> 98af80c193da
Removing intermediate container fde9a4c41a2c
Successfully built 98af80c193da
[root@foryou docker-build]#

查看images列表:

 [root@foryou ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 98af80c193da About a minute ago MB
centos apache 7ca4fb9d37b0 minutes ago MB
docker.io/centos latest 49f7960eb7e4 months ago MB
注: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 本地镜像名:镜像标签
例:
 [root@foryou docker-build]# docker save -o centos7.-httpd-docker-image.tar centos:httpd
[root@foryou docker-build]# ls # 查看导出成功
centos7.-httpd-docker-image.tar Dockerfile index.html start.sh

例: 使用导入本地镜像:

 [root@foryou docker-build]# docker images #查看目前存在的镜像为3个
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 98af80c193da minutes ago MB
centos apache 7ca4fb9d37b0 minutes ago MB
docker.io/centos latest 49f7960eb7e4 months ago MB
[root@foryou docker-build]# docker rmi centos:httpd # 先删除本地docker镜像,再导入:
Untagged: centos:httpd
Deleted: sha256:98af80c193da2361e45e1009aa258c7b88d0f4e508257825d0cec058c58f3357
Deleted: sha256:6f60d1fb621514bfb0996de921b6f4be58b5c6b1bf2d4f5bc1fd9c87da57b7b6
Deleted: sha256:ae384e75f303e82332d6fad55ea3e92377c0ecf4b3fbedaac55866683200660e
Deleted: sha256:b2bf86c2aba2e34cb4d9024af24e292695a2a3b54f641ce0113f3a5b199ecf94
Deleted: sha256:e6ad6ba7471a1e2621d1d7a42726dc024f2570fb9a7ff1e3c79dc3bf7750dfeb
Deleted: sha256:cb8e35f16eb44743ae67862df17775579ef12dd73e1e1945f9096b180aa11377
Deleted: sha256:e1a79980083b62c6b82cfd1723ad159dbbee9a5ed82efb59b8b5c4a60734a839
[root@foryou docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos apache 7ca4fb9d37b0 minutes ago MB
docker.io/centos latest 49f7960eb7e4 months ago MB
[root@foryou docker-build]# docker load -i centos7.-httpd-docker-image.tar
20d32b6c5508: Loading layer 120.3 MB/120.3 MB
d0cc030e6789: Loading layer 3.584 kB/3.584 kB
6799305b3e81: Loading layer 3.584 kB/3.584 kB
Loaded image: centos:httpd
[root@foryou docker-build]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos httpd 98af80c193da minutes ago MB
centos apache 7ca4fb9d37b0 minutes ago MB
docker.io/centos latest 49f7960eb7e4 months ago MB
方法 2:Push Image To Docker Hub 发布到外网(国外的网站)--也可以利用阿里云的docker仓库
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
用户名/镜像名

五 Container 容器端口映射

启动container:
 [root@foryou docker-build]# docker run -d -p : centos:httpd /bin/bash -c /usr/local/bin/start.sh
8ad27fc50c16b84f51739b7f467c94555343f793409605188819c6ddf81edd48
注: -p : 把容器中的 端口映射到物理机上的 端口
查看物理机和容器的网络:
查看容器的IP:
 [root@foryou docker-build]# docker run -it centos /bin/bash
[root@7a04ac0dcac7 /]# yum install net-tools -y
[root@7a04ac0dcac7 /]# ifconfig
eth0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 172.17.0.2 netmask 255.255.0.0 broadcast 0.0.0.0

物理机的IP:

 [root@foryou ~]# ifconfig
docker0: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu # 注:相当于虚拟机的 NAT 网络模式
inet 172.17.0.1 netmask 255.255.0.0 broadcast 0.0.0.0
inet6 fe80:::75ff:fed2:5eb6 prefixlen scopeid 0x20<link>
ether :::d2:5e:b6 txqueuelen (Ethernet)
RX packets bytes (1012.1 KiB)
RX errors dropped overruns frame
TX packets bytes (82.5 MiB)
TX errors dropped overruns carrier collisions ens33: flags=<UP,BROADCAST,RUNNING,MULTICAST> mtu
inet 192.168.10.1 netmask 255.255.255.0 broadcast 192.168.10.255

测试网络:

 [root@7a04ac0dcac7 /]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.17.0.1 0.0.0.0 UG eth0
172.17.0.0 0.0.0.0 255.255.0.0 U eth0
[root@7a04ac0dcac7 /]# ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) () bytes of data.
bytes from 192.168.10.1: icmp_seq= ttl= time=0.068 ms
bytes from 192.168.10.1: icmp_seq= ttl= time=0.101 ms

The end!

**************************************************************************************************
                                                        Good lucky to you
**************************************************************************************************

【linxu】部署docker容器虚拟化平台的更多相关文章

  1. Linux高级运维 第八章 部署docker容器虚拟化平台

    8.1  Docker概述 实验环境: CENTOS7.4-63 64位 Dcoker概述 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到 ...

  2. docker(二)部署docker容器虚拟化平台

    yum安装方法参考:https://www.cnblogs.com/yufeng218/p/8370670.html https://www.cnblogs.com/straycats/p/84112 ...

  3. 记录Linux CentOS 7系统完整部署Docker容器环境教程

    笔者之前有在"详细介绍Ubuntu 16.04系统环境安装Docker CE容器的过程"文章中有介绍到利用Ubuntu系统安装Docker容器环境的过程.如果我们有使用CentOS ...

  4. 在windows下使用jenkins部署docker容器

    在windows下使用jenkins部署docker容器最近在学习jenkins,docker部署来实现集成部署,所以想在windows下面实现测试,但是发现在windows下docker支持不是很好 ...

  5. Docker容器管理平台Rancher高可用部署——看这篇就够了

    记得刚接触Rancher时,看了官方文档云里雾里,跟着官网文档部署了高可用Rancher,发现不管怎么折腾都无法部署成功(相信已尝试的朋友也有类似的感觉),今天腾出空来写个总结,给看到的朋友留个参考( ...

  6. Linux环境基于CentOS7 搭建部署Docker容器

    1.Docker容器概述 区分Docker容器技术和VM虚拟机技术: evernotecid://394EFE90-9CE0-4D65-A8CD-DFEC0DC8061E/appyinxiangcom ...

  7. docker容器虚拟化技术

    简单来说,在Windows系统下安装各种运行环境的坑简直不要太多了(● ̄(エ) ̄●),并不仅限于docker.Nginx.PHP.Python等等,我会尽详细写出实际过程中遇到的各种各样的奇葩问题 1 ...

  8. 使用Portainer部署Docker容器实践

    一.背景 最近在使用rancher2.5.5部署Redis主从复制的时候,发现rancher会产生很多iptables的规则,这些规则导致我们在部署了rancher的机器上无法使用Redis的主从复制 ...

  9. k8s部署docker容器

    一.环境 需机器已部署好k8s和docker的环境 二.操作步骤 1.将制作好的镜像推送到docker仓库 docker tag nginx:test harbor:test-nginx docker ...

随机推荐

  1. Mysql InnoDB行锁实现方式(转)

    Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...

  2. 转载 DNS查询流程简介

    转载请注明出处:http://blog.csdn.net/luotuo44/article/details/45545059 DNS(domain name system),读者们或多或少都听过,就是 ...

  3. 第三篇、调优之路 Apache调优

    1.  简介 在第一篇中整合了apache + tomcat ,利用了apache解析静态文件为tomcat解压.但是在测试机上发现两者性能不足,不能充分利用服务器的性能,该篇中将对apache进行性 ...

  4. 【js】name 与 array 的纠葛 - 坑

    一. 现象 var name = new Array(); typeof(name)      // 为string 类型 var name = new Array('a' , 'b' , 'c'); ...

  5. hdu5696 区间的价值

    区间的价值 我们定义"区间的价值"为一段区间的最大值*最小值. 一个区间左端点在L,右端点在R,那么该区间的长度为(R-L+1). 现在聪明的杰西想要知道,对于长度为k的区间,最大 ...

  6. DB2 数据库的安装配置及监控

    一.DB2简介 IBM公司研制的一种关系型数据库系统.DB2主要应用于大型应用系统,具有较好的可伸缩性,可支持从大型机到单用户环境,应用于OS/2.Windows等平台下. DB2提供了高层次的数据利 ...

  7. change username on ubuntu&period;

    Below tutorial will show you how to change username in ubuntu 12.04 precise.First,we need login as r ...

  8. 谈USB重定向的方式

    在桌面虚拟化的项目中,常常会遇到用户提出的各自外设需求,这时产品对外设的兼容性就成为了项目成败的拦路虎 本文试图用通俗易懂的语言讲讲USB外设重定向的工作流程,先看看普通PC上USB设备的工作流程 u ...

  9. C&num;8&period;0中的 await foreach

    AsyncStreamsInCShaper 8.0 C# 8.0中支持异步返回枚举类型async Task<IEnumerable<T>> sync Streams这个功能已经 ...

  10. Toad 补充与培训 &amp&semi; 常用菜单

    Toad 常用菜单 新版本 toad 软件中, 比较有用的菜单 (toad10.6 版本) 下边菜单, 在日常工作中出现过的, 显示为 粉色 , 蓝色 表示次一级的重要 session 菜单 new ...