1.1Linux容器
Linux容器与系统其他部分隔离开的一系列进程,从另一个镜像运行,并由该镜像提供支持进程所需的全部文件。容器提供的镜像包含了应用的所有依赖项,因而从开发到测试再到生产的整个过程中,它都具有可移植性和一致性。
更加详细地来说,请您假定您在开发一个应用。您使用的是一台笔记本电脑,而且您的开发环境具有特定的配置。其他开发人员身处的环境配置可能稍有不同。您正在开发的应用依赖于您当前的配置,还要依赖于某些特定文件。与此同时,您的企业还拥有标准化的测试和生产环境,且具有自身的配置和一系列支持文件。您希望尽可能多在本地模拟这些环境,而不产生重新创建服务器环境的开销。
因此,您要如何确保应用能够在这些环境中运行和通过质量检测,并且在部署过程中不出现令人头疼的问题,也无需重新编写代码和进行故障修复?答案就是使用容器。容器可以确保您的应用拥有必需的配置和文件,使得这些应用能够在从开发到测试、再到生产的整个流程中顺利运行,而不出现任何不良问题。这样可以避免危机,做到皆大欢喜。
1.2容器与虚拟化的区别
1)虚拟化使得许多操作系统可同时在单个系统上运行
2)容器可以共享同一个操作系统内核,将应用进程与系统其他部分隔离开
2.Docker简介
2.1Docker
1)容器化技术,用于支持创建和使用Linux容器
2)开源的Docker社区致力于改进这类技术,并免费提供给所有用户
3.Docker安装部署
3.1环境准备
[root@localhost ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@localhost ~]# uname -r
3.10.0-693.el7.x86_64
[root@localhost ~]# getenforce
Disabled
[root@localhost ~]# systemctl status firewalld.service
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@localhost ~]# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.103 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::af24:1fe3:9292:9747 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:bb:d5:4a txqueuelen 1000 (Ethernet)
RX packets 288 bytes 56978 (55.6 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 111 bytes 13567 (13.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
ether 00:0c:29:bb:d5:54 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
3.2安装相关依赖包
[root@localhost ~]# yum -y install yum-utils device-maper-persistent-data lvm2
3.3添加软件源
[root@localhost ~]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@localhost ~]# yum makecache fast
说明:软件源下载后,无法安装docker,请将docker源下载到Windows上,再上传到linux中
3.4安装Docker
[root@localhost ~]# yum install -y docker-ce-17.09.0.ce
3.5启动Docker
[root@localhost ~]# systemctl start docker.service
4.Docker命令操作
4.1查看docker相关信息
[root@localhost ~]# docker version
Client:
Version: 17.09.0-ce
API version: 1.32
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:41:23 2017
OS/Arch: linux/amd64
Server:
Version: 17.09.0-ce
API version: 1.32 (minimum version 1.12)
Go version: go1.8.3
Git commit: afdb6d4
Built: Tue Sep 26 22:42:49 2017
OS/Arch: linux/amd64
Experimental: false
4.2docker镜像加速
[root@localhost ~]# curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://14c15248.m.daocloud.io
docker version >= 1.12
{"registry-mirrors": ["http://14c15248.m.daocloud.io"]}
Success.
You need to restart docker to take effect: sudo systemctl restart docker
[root@localhost ~]# systemctl restart docker.service
4.3运行docker
[root@localhost ~]# docker run -it centos
4.4搜索官方仓库镜像
[root@localhost ~]# docker search centos
4.5根据镜像名拉取镜像
[root@localhost ~]# docker pull centos
4.6查看当前主机镜像列表
[root@localhost ~]# docker images
4.7导出镜像
[root@localhost ~]# docker image save centos > docker-centos.tar.gz
4.8删除镜像
[root@localhost ~]# docker image rm centos:latest
4.9导入镜像
[root@localhost ~]# docker image load -i docker-centos.tar.gz
4.10创建容器
[root@localhost ~]# docker create centos:later /bin/bash
[root@localhost ~]# docker start stupefied_nobel
4.11查看正在运行的容器
[root@localhost ~]# docker ps
4.12查看所有容器
[root@localhost ~]# docker ps -a
4.13删除所有容器
[root@localhost ~]# docker rm -f `docker ps -a -q`
5.手动将容器保存为镜像
5.1启动一个centos6.9的镜像
[root@localhost ~]# docker pull centos:6.9
[root@localhost ~]# docker run -it -p 1022:22 centos:6.9 /bin/bash
[root@58201b2b92b ~]# yum install -y openssh-server
[root@58201b2b92b ~]# echo "root:123456" | chpasswd
[root@58201b2b92b ~]# /etc/init.d/sshd start
5.2将容器提交为镜像
[root@localhost ~]# docker commit brave_mcclintock centos-ssh
6.docker 仓库
6.1创建仓库
docker run -d -p 5000:5000 --restart=always --name registry -v
/opt/myregistry:/var/lib/registry registry
6.2修改配置文件,使之支持http
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://registry.docker-cn.com"],
"insecure-registries": ["10.0.0.103:5000"]
}
6.3重启docker
[root@localhost ~]# systemctl restart docker.service
6.4修改镜像标签
[root@localhost ~]# docker tag busybox:latest 10.0.0.103:5000/clsn/busybox:1.0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
centos6-ssh latest 3c2b1e57a0f5 18 hours ago 393MB
httpd 2.4 2e202f453940 6 days ago 179MB
10.0.0.100:5000/clsn/busybox 1.0 5b0d59026729 8 days ago 1.15MB
6.5将新打标签的镜像上传到仓库
[root@localhost ~]# docker push 10.0.0.100:5000/clsn/busybox
原文:http://blog.51cto.com/13520761/2109300