Docker是一个开源的应用容器引擎,使用Go语言开发,基于Linux内核的CGroup、Namespace、Union FS等技术实现的一种系统级虚拟化技术。
镜像(Image)
镜像,可以理解为一个模板,这个模版提供了器运行时所需的程序、库、资源、配置等必要文件。只要有了这个模版,我们可以在任何装有docker的系统上运行容器,也就是所谓的Docker是build once,run everywhere。
容器(Container)容器,就是依据镜像这个模板创建出来的实体。容器的实质是进程,但与直接在宿主执行的进程不同,容器进程运行于属于自己的独立的命名空间。因此容器可以拥有自己的root 文件系统、自己的网络配置、自己的进程空间,甚至自己的用户ID 空间。容器内的进程是运行在一个隔离的环境里,使用起来,就好像是在一个独立于宿主的系统下操作一样。这种特性使得容器封装的应用比直接在宿主运行更加安全。
仓库(Repository)
仓库,故名思义就是存放东西的,这里的“东西”就是Image。用户可以通过仓库拉取镜像运行容器,也可以构建镜像存放在仓库中。仓库可分为为公共仓库和私有仓库,所有用户都能使用的仓库称为公共仓库,而私有仓库则是个人或者团队自己搭建,只供个人或者团队使用。
一个直观图说明其各个组件运行关系:
Docker 从v17.03开始划分为CE 和EE。CE 即社区版,EE 即企业版,强调安全,付费使用。Docker在1.13 版本之后,从2017年的3月1日开始,版本命名规则变为如下:
Docker CE 每月发布一个Edge 版本(17.03, 17.04, 17.05…),每三个月发布一个Stable 版本(17.03, 17.06, 17.09…),Docker EE 和Stable 版本号保持一致,但每个版本提供一年维护。
安装需求:
由于Docker是建立在linux中两种核心技术之上:namespace与Cgroup,而User namespace出现的版本是3.8,所以安装docker需要内核版本大于3.10,centos6内核版本是2.6所以无法在其上使用docker。 namespace 系统调用参数 隔离内容 内核版本 UTS CLONENEWUTS 主机名和域名 2.6.19 IPC CLONENEWIPC 信号量、消息队列和共享内存 2.6.19 PID CLONENEWPID 进程编号 2.6.24 Network CLONENEWNET 网络设备、网络栈、端口等 2.6.29 Mount CLONENEWNS 挂载点(文件系统) 2.4.19 User CLONENEWUSER 用户和用户组 3.8
2.添加仓库
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r
yum install docker-ce-
5.安装最新版docker
yum install docker-ce docker-ce-cli containerd.io
sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable”
sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io
5.若安装指定版本采用如下方式
/#列出版本 $ apt-cache madison docker-ce docker-ce | 5:18.09.1~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 5:18.09.0~3-0~debian-stretch | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 18.06.1~ce~3-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages docker-ce | 18.06.0~ce~3-0~debian | https://download.docker.com/linux/debian stretch/stable amd64 Packages/#安装 sudo apt-get install docker-ce=
停止防火墙、关闭selinuxsystemctl stop firewalld && systemctl disable firewalld && setenforce 0
配置镜像加速
默认docker从DockerHUB上拉取镜像,由于国内网络原因下载镜像速度会变慢,所以可以配置国内镜像加速地址https://registry.docker-cn.com,当有多个镜像加速地址时候可在列表中以逗号分割。
mkdir /etc/docker cat> /etc/docker/daemon.json < 运行docker /#重新装载systemd服务 systemctl daemon-reload/#启动docker systemctl start docker/#开机自动docker/#systemctl enable docker/#查看docker版本 [root@app51 ~]/#docker version Client: Version:18.09.2API version:1.39Go version: go1.10.6Git commit:6247962Built: Sun Feb10 04:13:27 2019OS/Arch: linux/amd64 Experimental: false Server: Docker Engine-Community Engine: Version:18.09.2API version:1.39 (minimum version 1.12) Go version: go1.10.6Git commit:6247962Built: Sun Feb10 03:47:25 2019OS/Arch: linux/amd64 docker 命令采用了分组管理的思想,已经纳入管理的docker命令如下(版本18.09.2): 其中docker container 则是管理容器命令,老的版本中是使用docker进行容器管理,新版本兼容老版本docker命令,所以对容器管理既可用docker也可以用docker container。 方式1:docker run [OPTIONS] IMAGE [COMMAND] [ARG…] 常用OPTIONS: 示例:运行一个名字为nginx-container的容器,使用镜像nginx,并将宿主机的8080映射到容器内部80端口,然后进入交互模式。 [root@app51 ~]/#docker run -it --name nginx-container -p 8080:80 nginx /bin/bash root@fd92290433da://#ls bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var docker ps [OPTIONS] 常用选项: root@app51 ~]/#docker ps -n 2 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4d51a1cdf4b4 busybox"/bin/sh" 11 seconds ago Up 9seconds busybox 383f31ff8f01 nginx"nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:8080->80/tcp nginx-container [root@app51~]/#docker ps -l CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 4d51a1cdf4b4 busybox"/bin/sh" 41 seconds ago Up 39seconds busybox [root@app51~]/# docker inspect [OPTIONS] NAME|ID [NAME|ID…] 示例:[root@app51 ~]/#docker inspect busybox [ {"Id": "4d51a1cdf4b4e06831faa6e54a32f1f8eb544e349028083b12f5b3f87af075c9","Created": "2019-02-23T09:10:20.907074902Z","Path": "/bin/sh","Args": [], 4.停止容器 方式一:docker stop [OPTIONS] CONTAINER [CONTAINER…] 方式二: docker kill [OPTIONS] CONTAINER [CONTAINER…] 区别:docker stop 相当于发送15停止信号,而kill是强制终止对应信号9 示例:[root@app51 ~]/#docker stop nginx-container nginx-container docker start [OPTIONS] CONTAINER [CONTAINER…] 常用选项: docker rm [OPTIONS] CONTAINER [CONTAINER…] 或者docker container rm 如果删除的容器正在运行则需要指定-f进行强制删除常用选项: docker rm nginx-container Ps:删除所有容器 docker rm -f docker pause CONTAINER [CONTAINER…] 示例:[root@app51 ~]/#docker pause nginx-container nginx-container docker unpause CONTAINER [CONTAINER…] [root@app51 ~]/#docker pause nginx-container nginx-container docker logs [OPTIONS] CONTAINER 常用选项: docker exec [OPTIONS] CONTAINER COMMAND [ARG…] 常用选项: 示例:[root@app51 ~]/#docker exec -it -u nginx nginx-container /bin/sh $ id uid=101(nginx) gid=101(nginx) groups=101(nginx) $ docker export [OPTIONS] CONTAINER 容器导出类似于容器快照,导出的是容器的在宿主机上的文件系统压缩包,导出的文件系统可使用docker import进行导入,在其他机器导入时候会以镜像的方式存在。常用参数 [root@app51 ~]/#docker export nginx-container -o nginx.tar [root@app51 ~]/#ls -lh ningx.tar -rw------- 1 root root 107M 2月 23 19:18 ningx.tar 12.将导出的容器导入为镜像 docker import [OPTIONS] file|URL|- [REPOSITORY[:TAG]]容器导入可以是文件、文件url、镜像仓库 示例: [root@app51 ~]/#docker import nginx.tar nginx:v154 sha256:fd4931710d35765edb9bbd0ea84a886e0901aa7a2de03ab2eefd9aedea0e8646 [root@app51~]/#docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx v154 fd4931710d3510seconds ago 108MB 其他导入示例 docker import http://example.com/image.tar.gz repository:tag docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]] 常用选项: [root@app51 ~]/#docker commit -p -m 'build nginx image' nginx-container nginx:test sha256:6c68885804ca69970d747cc6cc8050ed7a1b6c24838695ec11b18348318809a6 [root@app51~]/#docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx test 6c68885804ca6seconds ago 109MB nginx v154 fd4931710d352 hours ago 108MB 在老版本中镜像操作也是使用的docker命令,新版本进行了分组,可使用docker image 来进行镜像操作。 docker search [OPTIONS] TERM 常用选项: 结果字段含义: NAME:镜像名称DESCRIPTION :镜像描述 STARS :获赞数量OFFICIAL :是否为官方镜像 AUTOMATED:是否为自动构建 docker image pull TAG不写默认为最新版本latest [root@app51 ~]/#docker pull centos Using default tag: latest latest: Pullingfrom library/centos a02a4930cb5d: Pull complete Digest: sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Status: Downloaded newer imagefor centos:latest docker image ls 或者docker images 常用选项: docker image rm [OPTIONS] IMAGE [IMAGE...] 或者docker rmi IMAGE[root@app51 ~]/#docker image rm centos Untagged: centos:latest Untagged: centos@sha256:184e5f35598e333bfa7de10d8fb1cebb5ee4df5bc0f970bf2b1e7c7345136426 Deleted: sha256:1e1148e4cc2c148c6890a18e3b2d2dde41a6745ceb4e5fe94a923d811bf82ddb Deleted: sha256:071d8bd765171080d01682844524be57ac9883e53079b6ac66707e192ea25956 docker save [OPTIONS] IMAGE [IMAGE...] 将镜像打包为压缩包,可在其他docker主机进行导入,一次可打包多个 常用选项: 示例:[root@app51 ~]/#docker save -o nginx-bus.tar.gz busybox:latest nginx:latest docker load [OPTIONS] 将已经导出的镜像压缩文件导入为镜像 常用选项: docker image inspect [OPTIONS] IMAGE [IMAGE...][root@app51 ~]/#docker image inspect nginx [ {"Id": "sha256:f09fe80eb0e75e97b04b9dfb065ac3fda37a8fac0161f42fca1e6fe4d0977c80","RepoTags": ["nginx:latest"],"RepoDigests": ["nginx@sha256:dd2d0ac3fff2f007d99e033b64854be0941e19a2ad51f174d9240dda20d9f534"], 运行信息查看docker info[root@app51 ~]/#docker info Containers: 1Running:1Paused: 0 Stopped: 0 Images:4Server Version:18.09.2Storage Driver: overlay2 Backing Filesystem: xfs Supports d_type: true Native Overlay Diff: true 版本信息查看 docker version root@app51 ~]/#docker version Client: Version:18.09.2API version:1.39Go version: go1.10.6Git commit:6247962Built: Sun Feb10 04:13:27 2019OS/Arch: linux/amd64 Experimental: false 三、docker基本操作
容器操作
1.启动容器
可以使用如下三种方式:
2.查看容器
示例 :
3.查看容器具体信息
5.启动已停止的容器
[root@app51 ~]/#docker start -ia busybox / /#ls bin dev etc home proc root sys tmp usr var/ /#ps PID USER TIME COMMAND1 root 0:00 /bin/sh7 root 0:00 ps
6.删除容器
示例:
docker ps -a -q
docker ps-a |awk -F ' ' '{print $1}' |xargs docker rm -f7. 暂停某个容器
8.恢复暂停的容器
9.查看容器日志
root@app51 ~]/#docker logs nginx-container 10.1.201.30 - - [23/Feb/2019:10:55:33 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.109 Safari/537.36" "-"
10.在已运行的容器中运行命令
11.容器导出
示例 :
12.将容器提交为镜像
示例:
镜像操作
1.搜索镜像
[root@app51 ~]/#docker search centos NAME DESCRIPTION STARS OFFICIAL AUTOMATED centos The official build of CentOS.5179[OK] ansible/centos7-ansible Ansible on Centos7 120[OK] jdeathe/centos-ssh CentOS-6 6.10 x86_64 / CentOS-7 7.5.1804 x86… 106[OK] consol/centos-xfce-vnc Centos container with "headless" VNC session… 80 [OK]
2.下载镜像
3.查看镜像
[root@app51 ~]/#docker image ls -a REPOSITORY TAG IMAGE ID CREATED SIZE centos latest 1e1148e4cc2c2 months ago 202MB
4.删除镜像
5. 镜像导出
6.镜像导入
[root@app51 ~]/#docker load -i nginx-bus.tar.gz Loaded image: nginx:latest Loaded image: busybox:latest
7.查看镜像信息
其他