目录
[1.1 Docker 概述](#1.1 Docker 概述)
[1.1.1 Docker 的优势](#1.1.1 Docker 的优势)
[1.1.2 镜像](#1.1.2 镜像)
[1.1.3 容器](#1.1.3 容器)
[1.1.4 仓库](#1.1.4 仓库)
[1.2 安装 Docker](#1.2 安装 Docker)
[1.2.1 配置和安装依赖环境](#1.2.1 配置和安装依赖环境)
[1.3.1 搜索镜像](#1.3.1 搜索镜像)
[1.3.2 获取镜像](#1.3.2 获取镜像)
[1.3.3 查看镜像](#1.3.3 查看镜像)
[1.3.4 给镜像重命名](#1.3.4 给镜像重命名)
[1.3.5 存储,载入镜像和删除镜像](#1.3.5 存储,载入镜像和删除镜像)
[1.4 Doecker容器操作](#1.4 Doecker容器操作)
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 配置和安装依赖环境
bash
[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
bash
[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 镜像名称
bash
[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
bash
[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
javanile/lamp latest 93e4adef599c 5 years ago 590MB
也可以去浏览器搜索
OpenAtom Foundation - 开放原子开源基金会
bash
[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 容器名称:[标签] 新容器名称:[标签]
bash
[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 < 存储的文件名
bash
//存储
[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分配一个伪终端
bash
[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/名称
bash
[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/名称 > 文件名
bash
[root@bogon ~]# docker export 74a4a4169407 > nginx
[root@bogon ~]# ls
anaconda-ks.cfg nginx nginx01
1.4.4删除docker
语法:docker rm 容器ID/名称
bash
[root@bogon ~]# docker rm 74a4a4169407
74a4a4169407
[root@bogon ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES