01 Docker概念和部署
目录
1.1 Docker 概述
1.1.1 Docker 的优势
1.1.2 镜像
1.1.3 容器
1.1.4 仓库
1.2 安装 Docker
1.2.1 配置和安装依赖环境
1.3镜像操作
1.3.1 搜索镜像
1.3.2 获取镜像
1.3.3 查看镜像
1.3.4 给镜像重命名
1.3.5 存储,载入镜像和删除镜像
1.4 Doecker容器操作
1.4.1创建和运行docker
1.4.2终止docker
1.4.3导出和导入docker
1.4.4删除docker
1.1 Docker 概述
因为 Docker 轻便、快速的特性,可以使应用达到快速迭代的目的。每次小的变更,马上就可以看到效果,而不用将若干个小变更积攒到一定程度再变更。每次变更一小部分其实是一种非常安全的方式,在开发环境中能够快速提高工作效率。
Docker 容器能够帮助开发人员、系统管理员、质量管理和版本控制工程师在一个生产环节中一起协同工作。制定一套容器标准能够使系统管理员更改容器的时候,程序员不需要关心容器的变化,而更专注自己的应用程序代码。从而隔离开了开发和管理,简化了开发和部署的成本。
1.1.1 Docker 的优势
Docker 容器运行速度很快,启动和停止可以在秒级实现,比传统虚拟机要快很多:Docker 核心解决的问题是利用容器来实现类似虚拟机的功能,从而利用更加节省的硬件资源提供给用户更多的计算资源。因此,Docker容器除了运行其中的应用之外,基本不消耗额外的系统资源,在保证应用性能的同时,又减小了系统开销,使得一台主机上同时运行数千个 Docker 容器成为可能。Docker 操作方便,可以通过 Dockerile 配置文件支持灵活的自动化创建和部兴。表 1-1将 Docker容器技术与传统虚拟机的特性进行了比较。
Docker之所以拥有众多优势,与操作系统虚拟化自身的特点是分不开的。传统虚拟机需要有额外的虚拟机管理程序和虚拟机操作系统层,而Docker 容器则是直接在操作系统层面之上实现的虚拟化。图 1.2 是 Docker 与传统虚拟机架构。
1.1.2 镜像
镜像、容器、仓库是 Docker 的三大核心概念。其中 Docker 的镜像是创建容器的基础,类似虚拟机的快照,可以理解为一个面向 Docker 容器引擎的只读模板。例如:一个镜像可以是一个完整的 Cent OS 操作系统环境,称为一个 CentOS 镜像:也可以是一个安装了 MySQL 的应用程序,称之为一个 MySQL 镜像等等。
Docker 提供了简单的机制来创建和更新现有的镜像,用户也可以从网上下载已经创建好的镜像直接使用。
1.1.3 容器
Docker 的容器是从镜像创建的运行实例,它可以被启动、停止和删除。所创建的每一个容器都是相互隔离、互不可见,以保证安全性的平台。可以将容器看作是一个简易版的 Linux 环境,Docker 利用容器来运行和隔离应用。
1.1.4 仓库
Docker 仓库是用来集中保存镜像的地方,当创建了自己的镜像之后,可以使用 push 命令将它上传到公有仓库(Public)或者私有仓库(Private)。当下次要在另外一台机器上使用这个镜像时,只需从仓库获取。
仓库注册服务器(Registry)是存放仓库的地方,其中包含了多个仓库。每个仓库集中存放某一类镜像,并且使用不同的标签(tag)来区分它们。目前最大的公共仓库是docker Hub,存放了数量庞大的镜像供用户下载使用。
1.2 安装 Docker
Docker 支持在主流的操作系统平台上进行使用,包括Windows 系统、Linux 系统、以及 MacOS 系统等。目前最新的 RHEL、Cent OS 以及 Ubuntu 系统官方软件源中都已经默认自带了Docker 包,可直接安装使用,也可以用 Docker 自己的YUM 源进行配置。
Cent OS 系统下安装 Docker 可以有两种方式:一种是使用 CURL 获得 Docker 的安装脚本进行安装,另一种是使用YUM 仓库来安装 Docker。
注意:目前 Docker 只能支持 64 位系统。
1.2.1 配置和安装依赖环境
[root@bogon ~]# systemctl stop firewalld
[root@bogon ~]# systemctl disable firewalld
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@bogon ~]# setenforce 0
[root@bogon ~]# sed -i 's/=enforcing/=disabled/' /etc/selinux/config
//更换yum源
rm -rf /etc/yum.repos.d/*
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
curl -o /etc/yum.repos.d/epel.repo https://mirrors.aliyun.com/repo/epel-7.repo
yum clean all
# step 1: 安装必要的一些系统工具
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
# Step 2: 添加软件源信息
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# Step 3
sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
# Step 4: 更新并安装Docker-CE
sudo yum makecache fast
sudo yum -y install docker-ce
##Step 4:添加国内镜像站
mkdir /etc/docker/
cat>/etc/docker/daemon.json<<EOF
{
"registry-mirrors": ["https://registry.docker-cn.com"]
}
EOF
#Step 5: 开启Docker服务
systemctl restart docker
systemctl enable docker
docker version
cat>> /etc/sysctl.conf <<EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF
sysctl -p
service docker start
1.3镜像操作
1.3.1 搜索镜像
语法:docker search lamp
[root@bogon ~]# docker search lamp
NAME DESCRIPTION STARS OFFICIAL
javanile/lamp Ready to use LAMP stack 2
dockette/devstack My LAMP/Devstack Dockerfile 4
machines/la_p7 Just a ubuntu based lamp server 5
zmm1/lamp lamp 0
danku2/lamp lamp 0
mooseh81/lamp lamp 0
rahulvramesh/lamp Lamp 0
akharis76/lamp lamp 0
clarkzhang/lamp lamp 1
liachovskis/lamp lamp 0
sree2424/lamp LAMP 0
lizeqing/lamp lamp 0
rogalikk960/lamp LAMP 0
avatao/lamp Lamp 0
themankudz/lamp lamp 0
carmelg/lamp Lamp 0
pvitoroliveira/lamp LAMP 0
ztj1993/lamp lamp 0
hanhongwen86/lamp lamp 0
echo110/lamp lamp 0
kgc12345626/lamp lamp 0
bluelockr/lamp lamp 0
yiwang666/lamp lamp 0
jin7/lamp lamp 0
whyte624/lamp lamp 0
1.3.2 获取镜像
语法:docker pull 镜像名称
[root@bogon ~]# docker pull javanile/lamp //搜索镜像把想获取的镜像名字复制
Using default tag: latest
latest: Pulling from javanile/lamp
177e7ef0df69: Pull complete
9bf89f2eda24: Pull complete
350207dcf1b7: Pull complete
a8a33d96b4e7: Pull complete
c0421d5b63d6: Pull complete
f76e300fbe72: Pull complete
af9ff1b9ce5b: Pull complete
d9f072d61771: Pull complete
2a25fcb23d18: Pull complete
0e496ab19dff: Pull complete
2a5d39fc92ab: Pull complete
8603dc5a76e7: Pull complete
4525497200a2: Pull complete
df66f65de27a: Pull complete
713450f54733: Pull complete
671fe08b3a47: Pull complete
137a046abb87: Pull complete
95e5fdb4ef1e: Pull complete
25120b64e168: Pull complete
b98e7028aee5: Pull complete
dc19ac08c236: Pull complete
8d52f75adf6b: Pull complete
5eccdeef64ae: Pull complete
67abf7efecfb: Pull complete
630fc12f5841: Pull complete
ef5e50840ada: Pull complete
a0bb707f7630: Pull complete
7c6e8038d8ad: Pull complete
Digest: sha256:09417dcad61160eb823c10ac1358534b34099183e07d73697dabafb691cac12a
Status: Downloaded newer image for javanile/lamp:latest
docker.io/javanile/lamp:latest
1.3.3 查看镜像
语法:docker images
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
javanile/lamp latest 93e4adef599c 5 years ago 590MB
也可以去浏览器搜索
OpenAtom Foundation - 开放原子开源基金会
[root@bogon ~]# docker pull hub.atomgit.com/library/nginx:1.24-bullseye-perl
1.24-bullseye-perl: Pulling from library/nginx
1a82ea2e025a: Pull complete
3ef6bc7c6b34: Pull complete
b8ea68ef5510: Pull complete
152901865926: Pull complete
b39f33faf2b2: Pull complete
cf865bd10e05: Pull complete
9e86338fed04: Pull complete
Digest: sha256:5ea912c7bb6484dc11449d6de083739bd20bb6bda5d6ab734efab5df8795f683
Status: Downloaded newer image for hub.atomgit.com/library/nginx:1.24-bullseye-perl
hub.atomgit.com/library/nginx:1.24-bullseye-perl
[root@bogon ~]# docker pull hub.atomgit.com/amd64/php:8.0.30-zts-alpine3.16
8.0.30-zts-alpine3.16: Pulling from amd64/php
7c8cfa7ced9c: Pull complete
d7ea62a47e45: Pull complete
e0f7352b80f9: Pull complete
eba0b083dedc: Pull complete
af5bc0af13d5: Pull complete
cd059df25d90: Pull complete
19e54be3f36c: Pull complete
c1520122c20b: Pull complete
44b661e0c458: Pull complete
Digest: sha256:557389c60b0441f78932adb353549d05278bdea0e8b4318f0105731e2ce39343
Status: Downloaded newer image for hub.atomgit.com/amd64/php:8.0.30-zts-alpine3.16
hub.atomgit.com/amd64/php:8.0.30-zts-alpine3.16
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.atomgit.com/amd64/php 8.0.30-zts-alpine3.16 84fecea0dbc0 9 months ago 70MB
hub.atomgit.com/library/nginx 1.24-bullseye-perl 31364c7f01e7 9 months ago 190MB
javanile/lamp latest 93e4adef599c 5 years ago 590MB
1.3.4 给镜像重命名
语法 docker tag 容器名称:[标签] 新容器名称:[标签]
[root@bogon ~]# docker tag hub.atomgit.com/library/nginx:1.24-bullseye-perl nginx:nv1.24
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.atomgit.com/amd64/php 8.0.30-zts-alpine3.16 84fecea0dbc0 9 months ago 70MB
nginx nv1.24 31364c7f01e7 9 months ago 190MB
hub.atomgit.com/library/nginx 1.24-bullseye-perl 31364c7f01e7 9 months ago 190MB
javanile/lamp latest 93e4adef599c 5 years ago 590MB
1.3.5 存储,载入镜像和删除镜像
存储语法:docker save -o 存储文件名 仓库名:[标签]
删除语法:docker rmi 镜像号或者仓库名:[标签]
载入语法:docker load < 存储的文件名
//存储
[root@bogon ~]# docker save -o nginx01 nginx:nv1.24
[root@bogon ~]# ls
anaconda-ks.cfg nginx01
//删除
[root@bogon ~]# docker rmi nginx:nv1.24
Untagged: nginx:nv1.24
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.atomgit.com/amd64/php 8.0.30-zts-alpine3.16 84fecea0dbc0 9 months ago 70MB
hub.atomgit.com/library/nginx 1.24-bullseye-perl 31364c7f01e7 9 months ago 190MB
javanile/lamp latest 93e4adef599c 5 years ago 590MB
//载入
[root@bogon ~]# docker load <nginx01
Loaded image: nginx:nv1.24
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.atomgit.com/amd64/php 8.0.30-zts-alpine3.16 84fecea0dbc0 9 months ago 70MB
nginx nv1.24 31364c7f01e7 9 months ago 190MB
hub.atomgit.com/library/nginx 1.24-bullseye-perl 31364c7f01e7 9 months ago 190MB
javanile/lamp latest 93e4adef599c 5 years ago 590MB
1.4 Doecker容器操作
1.4.1创建和运行docker
语法:docker create -it 容器名称 容器ID 分配一个伪终端
- -i:容器的输入保持打开
- -t:让docker分配一个伪终端
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hub.atomgit.com/amd64/php 8.0.30-zts-alpine3.16 84fecea0dbc0 9 months ago 70MB
nginx nv1.24 31364c7f01e7 9 months ago 190MB
hub.atomgit.com/library/nginx 1.24-bullseye-perl 31364c7f01e7 9 months ago 190MB
javanile/lamp latest 93e4adef599c 5 years ago 590MB
[root@bogon ~]# docker create -it nginx 31 //31 IMAGE ID 的开头2个数字
Unable to find image 'nginx:latest' locally
latest: Pulling from library/nginx
a2318d6c47ec: Pull complete
095d327c79ae: Pull complete
bbfaa25db775: Pull complete
7bb6fb0cfb2b: Pull complete
0723edc10c17: Pull complete
24b3fdc4d1e3: Pull complete
3122471704d5: Pull complete
Digest: sha256:04ba374043ccd2fc5c593885c0eacddebabd5ca375f9323666f28dfd5a9710e3
Status: Downloaded newer image for nginx:latest
623dc9642a3f216d0de1c34f65788711338b03691b402e29999258dec30b6f85
[root@bogon ~]# docker run -it nginx &
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74a4a4169407 nginx "/docker-entrypoint.…" 2 seconds ago Up 1 second 80/tcp wonderful_chatelet
1.4.2终止docker
语法:docker stop 容器ID/名称
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74a4a4169407 nginx "/docker-entrypoint.…" 5 minutes ago Up 5 minutes 80/tcp wonderful_chatelet
[root@bogon ~]# docker stop 74a4a4169407
74a4a4169407
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
74a4a4169407 nginx "/docker-entrypoint.…" 5 minutes ago Exited (0) 2 seconds ago wonderful_chatelet
[root@bogon ~]#
1.4.3导出和导入docker
语法:docker export 容器ID/名称 > 文件名
[root@bogon ~]# docker export 74a4a4169407 > nginx
[root@bogon ~]# ls
anaconda-ks.cfg nginx nginx01
1.4.4删除docker
语法:docker rm 容器ID/名称
[root@bogon ~]# docker rm 74a4a4169407
74a4a4169407
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES