Docker是一个能把开发的应用程序自动部署到容器的开源引擎。它在虚拟化的环境中增加了一个应用程序部署引擎,提供一个轻量、快速的环境,让开发者高效的将程序部署到各种环境。Docker是一个C/S架构的程序,提供一个命令行工具docker及一整套Restful API。
Docker组件
示例在Centos7.7上安装docker
docker官方建议内核至少3.8以上,建议3.10以上,如若不是请升级内核,
查看内核版本信息
# uname -a
更新yum包
# yum update
安装需要的软件包,yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
# yum install -y yum-utils device-mapper-persistent-data lvm2
设置yum源,此外考虑速度问题,采用国内的阿里镜像
# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
查看仓库中可选的centos的docker镜像
# yum list docker-ce --showduplicates | sort -r
Bad id for repo: mirrors.aliyun.com_docker-ce_linux_centos_docker-ce.xn--repo()-mu8ig98h4l0hokj, byte = ( 60
* updates: mirrors.aliyun.com
Loading mirror speeds from cached hostfile
Loaded plugins: fastestmirror, langpacks
* extras: mirrors.aliyun.com
docker-ce.x86_64 3:19.03.8-3.el7 docker-ce-stable
...
docker-ce.x86_64 18.03.1.ce-1.el7.centos docker-ce-stable
...
* base: mirrors.cn99.com
Available Packages
安装Docker,命令:yum install docker-ce-版本号,我选的是docker-ce-18.03.1.ce,如下
# yum install docker-ce-18.06.3.ce-3.el7
至此,docker已经安装完成了,下面来启动它
# systemctl start docker
添加自启动守护
# systemctl enable docker
查看安装完成的docker
# docker version
Client:
Version: 18.06.3-ce
API version: 1.38
Go version: go1.10.3
Git commit: d7080c1
Built: Wed Feb 20 02:26:51 2019
OS/Arch: linux/amd64
Experimental: false
上面我们已经安装完成了docker,现在我们来尝试运行一个示例吧,就以ubuntu镜像为示例吧
可以通过docker search来查找镜像
# docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10614 [OK]
第一个是顶层仓库提供的官方镜像
拉取镜像(默认拉取tag为latest的镜像)
# docker pull ubuntu
Using default tag: latest
latest: Pulling from library/ubuntu
Digest: sha256:04d48df82c938587820d7b6006f5071dbbffceb7ca01d2814f81857c631d44df
Status: Image is up to date for ubuntu:latest
启动容器
# docker run --name demo_container -i -t ubuntu /bin/bash
demo_container:新容器的名称,否则docker会为新启动的容器命名一个随机的名称
-i:开启容器中STDIN,为交互式shell提供标准输入
-t:为创建的容器分配一个伪tty终端
-d:创建守护式容器,让容器在后台运行
ubuntu:镜像的名称
/bin/bash:容器启动后执行的命令
成功后,我们即将会进入新创建的ubuntu容器中。
Docker Registry分为顶层仓库和用户仓库。
用户仓库:有Docker用户创建,命名有用户名和仓库名两部分组成:bourne/demo, 这里bourne是用户名,demo是仓库名
顶层仓库:顶层仓库由Docker公司和一些优质厂商提供。相对于用户仓库,名称只包含仓库门部分,如ubuntu仓库。
比如用docker search 查找ubuntu镜像
# docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating sys… 10614 [OK]
dorowu/ubuntu-desktop-lxde-vnc Docker image to provide HTML5 VNC interface … 404 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of offi… 243 [OK]
排在首位的ubuntu仓库即来自于顶层仓库,而其余两个即使用户仓库
出于安全等考虑,我们会搭建一个私有的Registry,得益于Docker公司的开源,运行自己的Registry非常简单。
启动一个运行Registry的容器(端口是5000),并绑定到本地宿主机5000端口(冒号后面的5000端口是registry容器的端口)
# sudo docker run -p 5000:5000 registry
而将镜像推送到本地仓库,只有为该镜像打上tag,然后为即可推荐,此处示范将从顶层仓库拉下来的ubuntu镜像,推送到本地
本地的镜像
# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
ubuntu latest 72300a873c2c 3 weeks ago 64.2MB
registry latest 708bc6af7e5e 7 weeks ago 25.8MB
为ubuntu镜像(72300a873c2c)打上tag,为了指定新的Registry地址,需要在镜像名前加上主机和端口
# docker tag 72300a873c2c 127.0.0.1:5000/weicjf/ubuntu_18.04
# docker push 127.0.0.1:5000/weicjf/ubuntu_18.04
The push refers to repository [127.0.0.1:5000/weicjf/ubuntu_18.04]
1852b2300972: Mounted from weicjf/static_web
03c9b9f537a4: Mounted from weicjf/static_web
8c98131d2d1d: Mounted from weicjf/static_web
cc4590d6a718: Mounted from weicjf/static_web
latest: digest: sha256:... size: 1152
现在这个镜像被提交到了本地的Registry,可以通过使用docker run命令构建基于其的新容器,启动的新容器hostname为c34b66f33e2a
# docker run -i -t 127.0.0.1:5000/weicjf/ubuntu_18.04 /bin/bash
root@c34b66f33e2a:/#
root@c34b66f33e2a:/# hostname
c34b66f33e2a
root@c34b66f33e2a:/#
ps:可以通过ip:5000/v2/_catalog查看本地的镜像