目录
一、什么是docker
- Docker 属于 Linux 容器的一种封装,提供简单易用的容器使用接口。它是目前最流行的 Linux 容器解决方案。
- 而 Linux 容器是 Linux 发展出了另一种虚拟化技术,简单来讲, Linux
容器不是模拟一个完整的操作系统,而是对进程进行隔离,相当于是在正常进程的外面套了一个保护层。对于容器里面的进程来说,它接触到的各种资源都是虚拟的,从而实现与底层系统的隔离。 - Docker
将应用程序与该程序的依赖,打包在一个文件里面。运行这个文件,就会生成一个虚拟容器。程序在这个虚拟容器里运行,就好像在真实的物理机上运行一样。有了
Docker ,就不用担心环境问题。 - 总体来说, Docker
的接口相当简单,用户可以方便地创建和使用容器,把自己的应用放入容器。容器还可以进行版本管理、复制、分享、修改,就像管理普通的代码一样。
- 很明显,这是一只鲸鱼,它托着许多集装箱。我们可以把宿主机可当做这只鲸鱼,把相互隔离的容器可看成集装箱,每个集装箱中都包含自己的应用程序。
二、容器 vs 虚拟机
-
VM是一个运行在宿主机之上的完整的操作系统,VM运行自身操作系统会占用较多的CPU、内存、硬盘资源。
Docker不同于VM,只包含应用程序以及依赖库,基于libcontainer运行在宿主机上,并处于一个隔离的环境中,这使得Docker更加轻量高效,启动容器只需几秒钟之内完成。 -
由于Docker轻量、资源占用少,使得Docker可以轻易的应用到构建标准化的应用中。
但Docker目前还不够完善,比如隔离效果不如VM,共享宿主机操作系统的一些基础库等;网络配置功能相对简单,主要以桥接方式为主;查看日志也不够方便灵活。
2.1 docker三大核心
另外,docker主要包括三大核心概念,理解了这三个核心概念,就能理解docker的整个生命周期:
1、镜像:类似于虚拟机镜像,可以将它理解为一个面向Docker引擎的只读模板,包含了文件系统,镜像是创建Docker容器的基础。
2、容器:类似于一个轻量级的沙箱,Docker利用容器来运行和隔离应用。容器是从镜像的应用运行实例,可以将其启动,开始,停止,删除,而这些容器都是相互隔离,互不可见的。镜像自身是只读的,容器从镜像启动的时候,Docker会在镜像的最上层创建一个可写层,镜像本身保持不变。
3、仓库:类似于代码仓库,是docker集中存放镜像文件的场所。
三、环境准备
3.1docker的镜像操作
3.11安装依赖包
[root@localhost yum.repos.d]# yum -y install yum-utils device-mapper-persistent-data lvm2
3.12设置阿里云镜像源
[root@bogon yum.repos.d]# yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
已加载插件:fastestmirror, langpacks
adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
grabbing file https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo
3.13安装dockers-ce
[root@bogon yum.repos.d]# yum -y install docker-ce
3.14安装dockers-ce 报错
解决方式:
[root@bogon yum.repos.d]# mv backup/* /etc/yum.repos.d/
[root@bogon yum.repos.d]# yum clean all
3.15开启docker:
systemctl start docker
ifconfig查看
3.16镜像加速
[root@bogon yum.repos.d]# tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xqctvpjh.mirror.aliyucs.com"]
}
EOF
查看
[root@bogon docker]# ls
daemon.json key.json
[root@bogon docker]# vi daemon.json
[root@bogon docker]#
[root@bogon docker]# systemctl daemon-reload
[root@bogon docker]# systemctl enable docker.service
3.17网络优化
[root@bogon docker]# vim /etc/sysctl.conf
[root@bogon docker]# sysctl -p
net.ipv4.ip_forward = 1
[root@bogon docker]# service network restart
Restarting network (via systemctl): [ 确定 ]
[root@bogon docker]# systemctl restart docker
[root@bogon docker]#
查看版本
[root@bogon docker]# docker version
3.18获取镜像
[root@bogon docker]# docker search nginx
列出镜像,此时没有镜像
[root@bogon docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
3.19获取下载安装镜像
[root@bogon docker]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
852e50cd189d: Pull complete
571d7e852307: Pull complete
addb10abd9cb: Pull complete
d20aa7ccdb77: Pull complete
8b03f1e11359: Pull complete
Digest: sha256:6b1daa9462046581ac15be20277a7c75476283f969cb3a61c8725ec38d3b01c3
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
[root@bogon docker]# docker pull tomcat
Using default tag: latest
latest: Pulling from library/tomcat
756975cb9c7e: Pulling fs layer
d77915b4e630: Pulling fs layer
5f37a0a41b6b: Pull complete
96b2c1e36db5: Pull complete
27a2d52b526e: Pull complete
a867dba77389: Pull complete
0939c055fb79: Pull complete
0b0694ce0ae2: Pull complete
81a5f8099e05: Pull complete
c3d7917d545e: Pull complete
Digest: sha256:a319b10d8729817c7ce0bcc2343a6f97711c7870395019340d96b6aafd6ccbea
Status: Downloaded newer image for tomcat:latest
docker.io/library/tomcat:latest
3.20删除镜像
[root@bogon docker]# docker rmi e0bd8b34b4ea
获取镜像信息
[root@bogon docker]# docker inspect bc9a0695f571
3.21添加新标签
[root@bogon docker]# docker tag nginx:latest nginx:web
3.22导出镜像
存储镜像名为nginx存在/opt/目录下
[root@bogon docker]# docker save -o /opt/nginx nginx:web //-o输出到指定文件
删除重新载入镜像
载入:
[root@bogon docker]# docker load < /opt/nginx
f5600c6330da: Loading layer 72.52MB/72.52MB
7ccabd267c9f: Loading layer 64.54MB/64.54MB
850c2400ea4d: Loading layer 3.072kB/3.072kB
f790aed835ee: Loading layer 4.096kB/4.096kB
7e914612e366: Loading layer 3.584kB/3.584kB
Loaded image: nginx:web
[root@bogon docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx web bc9a0695f571 Less than a second ago 133MB
3.2容器操作
3.21创建容器
-i 让容器的标准输入保持打开
-t 让Docker分配一个伪终端
-d 后台运行容器,并返回容器ID
docker ps -a 列出所有容器
[root@bogon docker]# docker create -it nginx:web /bin/bash //-i让容器的标准输入保持打开
83ac64bded360895d638ce4f85851f7f05dd64af578aa6fd08d1fdbd43a9843f//-t让Docker分配一个伪终端
[root@bogon docker]# docker ps -a //docker ps -a 列出所有容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
83ac64bded36 nginx:web "/docker-entrypoint.…" 13 seconds ago Created condescending_engelbart
3.22开启关闭容器
格式:docker start 容器ID号
[root@localhost abc]# docker start af255575064f
格式:docker stop 容器ID号
[root@localhost abc]# docker stop af255575064f
3.23docker run命令
docker run命令会执行从创建容器,开启容器,执行命令,关闭容器等一系列过程。如果没有创建容器和镜像,就会从下载镜像开始执行,一直到关闭容器。执行完成后直接关闭,状态为exited
3.24进入容器与退出容器
格式:docker exec -it 容器ID /bin/bash
[root@bogon docker]# docker exec -it 3ba2782b62e1 /bin/bash
[root@3ba2782b62e1 /]# ls
anaconda-post.log dev home lib64 mnt proc run srv tmp var
bin etc lib media opt root sbin sys usr
[root@3ba2782b62e1 /]# exit 退出
exit
3.25导出、导入容器
导出容器格式为:docker export 容器ID > 定义容器名
[root@bogon docker]# docker export 83ac64bded36 > /opt/nginx_c
[root@bogon docker]# ls /opt/
containerd nginx nginx_c rh
注意:导入容器只会生成镜像
[root@bogon opt]# cat nginx_c | docker import - nginx:web
sha256:890b85aa93f941184f58e17ea918b809fc535d3ceafe44139c7c3bb23b993b65
容器必须是exited 关闭状态,才能删除
[root@bogon docker]# docker stop 3ba2782b62e1
3ba2782b62e1
[root@bogon docker]# docker rm 3ba2782b62e1
3ba2782b62e1
3.26批量删除容器
第一种:
[root@localhost ~]# docker rm `docker ps -aq`
第二种:
[root@localhost ~]# docker ps -a | awk '{print "docker rm"$1}' | bash 不能删除up状态的容器