Docker概念、作用、术语

一张超级形象的图




docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复


看到这张图,大家会想到什么?

可以这么理解:大海是操作系统,鲸鱼是Docker,集装箱是在Docker 运行的容器! 

概念

百度百科:Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux 或 Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

作用

Docker简化了环境部署和配置,实现“一次构建,处处运行”,避免了因运行环境不一致而导致的异常

常用术语

Docker主机(Host):安装了Docker程序的主机,运行Docker守护进程

Docker镜像 (Image)--类似面向对象中的类:将软件环境打包好的模板,用来创建容器的,一个镜像可以创建多个容器

Docker容器(Container)--类似面向对象中的实例:运行镜像后生成的实例称为容器,每运行一次镜像就会产生一个容器,容器可以启动、停止或删除;容器使用是沙箱机制,互相隔离,是独立是安全的;可以把容器看作是一个简易版的Linux环境,包括用户权限、文件系统和运行的应用等;

Docker仓库 (Repository):用来保存镜像的,仓库中包含许多镜像,每个镜像都有不同的标签Tag<版本>,官方仓库: https://hub.docker.com/

使用Docker的步骤


1.安装Docker
2.从Docker仓库中下载软件对应的镜像
3.运行这个镜像,此时会生成一个Docker容器
4.对容器的启动/停止


下面进入实操,建议通过云服务器来练习:

Docker安装及配置

环境要求

Docker要求CentOS7,必须是64位, 且内核是3.10及以上

https://docs.docker.com/


docker 误删 恢复 docker误删镜像如何恢复_centos_02


docker 误删 恢复 docker误删镜像如何恢复_java_03


docker 误删 恢复 docker误删镜像如何恢复_docker_04


或者看这里:http://www.docker.org.cn/book/install/rhel-docker-dependance-28.html


docker 误删 恢复 docker误删镜像如何恢复_java_05


安装centos7(安装文件加Q群获取):

查看内核信息,满足docker安全要求

uname -r


docker 误删 恢复 docker误删镜像如何恢复_linux_06


安装

卸载旧版本

较旧的 Docker 版本称为 docker 或 docker-engine。如果已安装这些程序,请卸载它们以及相关的依赖项。


sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine


另外,还要删除镜像/容器等:rm -rf /var/lib/docker

否则,已有的镜像/容器删除不掉


docker 误删 恢复 docker误删镜像如何恢复_java_07


另外,如果误删了目录rm -rf /var/lib/docker

systemctl restart docker,重启docker后会生成目录

否则拉取镜像报错


docker 误删 恢复 docker误删镜像如何恢复_java_08


安装docker-ce

https://docs.docker.com/engine/install/centos/


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_09


安装所需软件包

yum install -y yum-utils device-mapper-persistent-data Ivm2


docker 误删 恢复 docker误删镜像如何恢复_linux_10


设置镜像仓库

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


docker 误删 恢复 docker误删镜像如何恢复_centos_11


如果报错


docker 误删 恢复 docker误删镜像如何恢复_linux_12


docker 误删 恢复 docker误删镜像如何恢复_java_13


docker 误删 恢复 docker误删镜像如何恢复_centos_14


 改为


docker 误删 恢复 docker误删镜像如何恢复_centos_15


生成缓存:yum makecache fast


docker 误删 恢复 docker误删镜像如何恢复_docker_16


列出docker ce的版本

yum list docker-ce --showduplicates | sort -r

或者:yum list docker-ce.x86_64  --showduplicates | sort -r

安装docker(下面表示安装最新版本,也可以根据上面的list,选择指定版本安装)

yum install docker-ce


docker 误删 恢复 docker误删镜像如何恢复_linux_17


查看版本

可以看到是go语言写的

docker version


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_18


启动

systemctl start docker


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_19


查看状态

systemctl status docker


docker 误删 恢复 docker误删镜像如何恢复_docker_20


docker info


docker 误删 恢复 docker误删镜像如何恢复_linux_21


停止

systemctl stop docker


docker 误删 恢复 docker误删镜像如何恢复_linux_22


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_23


重启

systemctl restart docker


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_24


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_25


设置开机启动

systemctl enable docker


docker 误删 恢复 docker误删镜像如何恢复_centos_26


验证

验证是否正确安装了docker,方法是运行hello-world镜像

本地没有hello-world镜像,就从远程拉

docker run


docker 误删 恢复 docker误删镜像如何恢复_linux_27


配置镜像加速器

登录阿里云获取镜像加速器地址

https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_28


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_29


配置自己的docker加速器


docker 误删 恢复 docker误删镜像如何恢复_linux_30


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_31


最后执行重启命令:


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_32


Docker操作(镜像、容器、更新构建镜像)

镜像操作

查找

docker search 镜像名


docker 误删 恢复 docker误删镜像如何恢复_docker_33


参数说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

stars: 类似 Github 里面的 star,表示点赞、喜欢的意思。

AUTOMATED: 自动构建。


也可以通过docker官网搜索mysql


docker 误删 恢复 docker误删镜像如何恢复_linux_34


点击查看详情


docker 误删 恢复 docker误删镜像如何恢复_centos_35


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_36


查看可以标签 


docker 误删 恢复 docker误删镜像如何恢复_docker_37


拉取

docker pull 镜像名:版本,如果版本不指定,默认就是latest


docker 误删 恢复 docker误删镜像如何恢复_centos_38


拉取完成


docker 误删 恢复 docker误删镜像如何恢复_java_39


查看所有本地镜像

docker images


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_40


各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签(版本)

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小


查看完整镜像id,可以加--no-trunc参数


docker 误删 恢复 docker误删镜像如何恢复_docker_41


获取镜像详细信息

docker inspect 镜像id


docker 误删 恢复 docker误删镜像如何恢复_java_42


上面id才是镜像的完整id

版本


docker 误删 恢复 docker误删镜像如何恢复_linux_43


端口


docker 误删 恢复 docker误删镜像如何恢复_centos_44


msyql数据文件


docker 误删 恢复 docker误删镜像如何恢复_java_45


删除指定的本地镜像

docker rmi -f 镜像id或者镜像名:tag,rmi全英文是remove image,-f表示强制删除


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_46


docker 误删 恢复 docker误删镜像如何恢复_linux_47


容器操作

运行容器


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_48


只有200M,是精简版centos(linux),只包含系统运行最基本的内核和库

@后面是容器的id

退出并关闭容器 


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_49


容器中,很多命令没有,比如ifconfig,可以这样安装:yum install -y net-tools

查看容器

docker ps -a

可以看到状态是Exited


docker 误删 恢复 docker误删镜像如何恢复_docker_50


-q,只显示容器id

docker ps -aq


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_51


启动容器

docker start


docker 误删 恢复 docker误删镜像如何恢复_centos_52


只显示运行的,docker ps


docker 误删 恢复 docker误删镜像如何恢复_linux_53


停止容器

docker stop


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_54


删除容器

docker rm


docker 误删 恢复 docker误删镜像如何恢复_java_55


一个镜像可以生成多个容器,启动时不指定名称,名称是是随机定义的


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_56


批量删除容器

docker rm -f $(docker ps -aq)

另外,也可以:docker rm -f 容器1 容器2


docker 误删 恢复 docker误删镜像如何恢复_linux_57


示例(含docker commit方式更新镜像)


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_58


docker 误删 恢复 docker误删镜像如何恢复_centos_59


docker 误删 恢复 docker误删镜像如何恢复_linux_60


不能访问,因为tomcat不是直接跑在虚拟机上的,而是跑在虚拟机上docker里面容器里的

192.168.0.105:8080


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_61


删除容器

docker rm


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_62


运行容器 


docker 误删 恢复 docker误删镜像如何恢复_linux_63


docker 误删 恢复 docker误删镜像如何恢复_linux_64


可以访问,但是报404

192.168.0.105:9999


docker 误删 恢复 docker误删镜像如何恢复_linux_65


加入容器

如果报错,可能版本是1.13.1 ,升级到ce版本可以解决,详见:本文安装docker部分
也可以根据docker官方文档配置yum源,重新安装,https://docs.docker.com/install/linux/docker-ce/centos/

下面两个图就是我之前安装的docker


docker 误删 恢复 docker误删镜像如何恢复_centos_66


docker 误删 恢复 docker误删镜像如何恢复_java_67


如果是ce版本,就没问题,如下图


docker 误删 恢复 docker误删镜像如何恢复_linux_68


进入webapps文件夹,是空的(tomcat默认的欢迎页面实际上放在的路径应该是webapps/ROOT/index.jsp或者index.html),旁边还有个webapps.dist的文件,进入才发现原本应该在webapps文件中的文件都在webapps.dist文件中。所以将webapps.dist重命名为webapps。


docker 误删 恢复 docker误删镜像如何恢复_centos_69


改名后


docker 误删 恢复 docker误删镜像如何恢复_linux_70


更新镜像:docker commit

将修改后的容器提交生成一个新镜像

-m是描述,-a是作者


docker 误删 恢复 docker误删镜像如何恢复_linux_71


通过新镜像,运行容器


docker 误删 恢复 docker误删镜像如何恢复_docker_72


加上版本


docker 误删 恢复 docker误删镜像如何恢复_linux_73


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_74


访问,成功

192.168.0.105:8888


docker 误删 恢复 docker误删镜像如何恢复_java_75


tomcat后台运行,-d

先删除容器


docker 误删 恢复 docker误删镜像如何恢复_java_76


docker 误删 恢复 docker误删镜像如何恢复_centos_77


返回了完整容器id


docker 误删 恢复 docker误删镜像如何恢复_docker_78


查看,docker ps

只显示12位容器id


docker 误删 恢复 docker误删镜像如何恢复_java_79


停止


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_80


启动


docker 误删 恢复 docker误删镜像如何恢复_linux_81


查看日志

docker logs 容器id或者容器名称

下面看到的就是tomcat的启动日志


docker 误删 恢复 docker误删镜像如何恢复_centos_82


拷贝

宿主机拷贝到容器中

docker cp


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_83


可以访问到

192.168.0.105:8888


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_84


容器拷贝到宿主机

拷贝到当前目录


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_85


在宿主机中可以看到


docker 误删 恢复 docker误删镜像如何恢复_centos_86


挂载

共享目录,运行下面的命令


docker run \
--name mytomcat2_con \
-p 8888:8080 \
-v /root/docker_test/tomcat/mydata:/usr/local/tomcat/mydata \
-d mytomcat2:v2


mydata目录在容器中会自动创建,可以看到宿主机对应目录下的文件

docker exec -it xxxxxxxxxxxx /bin/bash


docker 误删 恢复 docker误删镜像如何恢复_linux_87


容器中新增2.txt,3.txt


docker 误删 恢复 docker误删镜像如何恢复_centos_88


宿主机中可以看到容器中新增的文件


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_89


获取元信息

docker inspect 容器id


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_90


默认是rw,表示读写,如果容器中不能改,可以改为只读ro


-v /root/docker_test/tomcat/mydata:/usr/local/tomcat/mydata:ro


docker 误删 恢复 docker误删镜像如何恢复_docker_91


包含了jdk


docker 误删 恢复 docker误删镜像如何恢复_java_92


创建镜像(含Dockerfile讲解、自定义镜像)

创建镜像的方式

  更新镜像:使用docker commit命令,详见本文容器操作部分,可以文中搜索commit

  构建镜像:使用docker build命令,需要创建Dockerfile文件,下面讲解

Dockerfile

Dockerfile是用来构建Docker镜像的文件,是由一系列指令和参数构成的脚本,从FROM命令开始,紧接着各种命令、参数等,最终会生成一个新的镜像。

第一条指令必须是FROM,指定Base Image基础镜像,指令按从上往下的顺序,依次执行,每条指令都会创建一个新的镜像层并提交

常用指令


FROM:指定基础镜像,即当前新镜像是基于哪个镜像的
MAINTAINER:指定作者
RUN:指定镜像构建过程中要运行的命令
ENV:设置环境变量
WORKDIR:指定默认的工作目录,即进入容器后默认进入的目录
VOLUME:创建挂载点,也称容器数据卷,用于数据共享和持久化
CMD:指定容器启动时要运行的命令,与RUN不同的是, 这些命令不是在镜像构建过程中执行的
ENTRYPOINT:指定容器启动时要运行的命令
COPY:拷贝文件/目录到镜像中
ADD:拷贝文件到镜像中,且会自动解压缩
EXPOSE:指定对外暴露的端口


我们来看下官方tomcat的Dockerfile是如何写的


docker 误删 恢复 docker误删镜像如何恢复_centos_93


指定基础镜像、环境变量


docker 误删 恢复 docker误删镜像如何恢复_docker_94


暴露端口8080

运行容器,就把tomcat启动起来


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_95


自定义tomcat镜像

有时候,官方提供的镜像不一定满足我们的需求,我们想用自己期望的jdk、tomcat版本,那么,我们可以基于一个精简版centos来制作


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_96


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_97


FROM centos
 MAINTAINER qzcsbj

 # 拷贝文件
 ADD jdk-8u211-linux-x64.tar.gz /usr/local
 ADD apache-tomcat-9.0.19.tar.gz /usr/local

 # 配置环境变量
 ENV JAVA_HOME /usr/local/jdk1.8.0_211
 ENV CLASSPATH .:$JAVA_HOME/lib
 ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.19
 ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin

 WORKDIR $CATALINA_HOME

 EXPOSE 8080

 # 镜像运行容器就把tomcat启动起来
 CMD ["catalina.sh", "run"]


docker 误删 恢复 docker误删镜像如何恢复_docker_98


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_99


docker 误删 恢复 docker误删镜像如何恢复_java_100


运行容器


docker run \
--name qzcsbj_tomcat \
-p 8181:8080 \
-d qzcsbj/tomcat:1.0


docker 误删 恢复 docker误删镜像如何恢复_java_101


192.168.0.105:8181


docker 误删 恢复 docker误删镜像如何恢复_java_102


自定义镜像:qzcsbj7-influxdb_grafana


把自定义镜像推送到镜像仓库

创建命名空间


docker 误删 恢复 docker误删镜像如何恢复_linux_103


创建镜像仓库


docker 误删 恢复 docker误删镜像如何恢复_docker_104


docker 误删 恢复 docker误删镜像如何恢复_linux_105


docker 误删 恢复 docker误删镜像如何恢复_linux_106


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_107


镜像推送到阿里云


docker 误删 恢复 docker误删镜像如何恢复_java_108


下面给了login、push、pull的命令 


docker 误删 恢复 docker误删镜像如何恢复_docker_109


1. 登录阿里云Docker Registry
$ sudo docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com
用于登录的用户名为阿里云账号全名,密码为开通服务时设置的密码。您可以在访问凭证页面修改凭证密码。

2. 从Registry中拉取镜像
$ sudo docker pull registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]

3. 将镜像推送到Registry
$ sudo docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com
$ sudo docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]
$ sudo docker push registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:[镜像版本号]
请根据实际镜像信息替换示例中的[ImageId]和[镜像版本号]参数。


设置登录阿里云的docker仓库密码


docker 误删 恢复 docker误删镜像如何恢复_linux_110


登录


docker login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com


docker 误删 恢复 docker误删镜像如何恢复_java_111


指定镜像tag归入仓库


docker tag ab8ba635b677 registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0


将镜像推送到仓库


docker push registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_112


push成功


docker 误删 恢复 docker误删镜像如何恢复_centos_113


push的镜像


docker 误删 恢复 docker误删镜像如何恢复_centos_114


层信息


docker 误删 恢复 docker误删镜像如何恢复_docker_115


 搜索镜像


docker 误删 恢复 docker误删镜像如何恢复_linux_116


镜像信息


docker 误删 恢复 docker误删镜像如何恢复_centos_117


也可以修改信息


docker 误删 恢复 docker误删镜像如何恢复_linux_118


docker 误删 恢复 docker误删镜像如何恢复_docker_119


实战1:使用Docker搭建环境

安装tomcat,部署war包

拉取刚刚push的tomcat镜像


docker pull registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0


docker 误删 恢复 docker误删镜像如何恢复_centos_120


war包在Q群文件


docker 误删 恢复 docker误删镜像如何恢复_centos_121


运行容器


docker run \
--name qzcsbj_tomcat4 \
-p 8184:8080 \
-v /root/my_docker/qzcsbj_springboot_war.war:/usr/local/apache-tomcat-9.0.19/webapps/qzcsbj_springboot_war.war \
-d registry.cn-hangzhou.aliyuncs.com/qzcsbj/tomcat:v1.0


docker 误删 恢复 docker误删镜像如何恢复_java_122


192.168.0.105:8184/qzcsbj_springboot_war/test


docker 误删 恢复 docker误删镜像如何恢复_java_123


war包对应的代码:


docker 误删 恢复 docker误删镜像如何恢复_docker_124


安装mysql、nginx、redis

安装方式都差不多(创建挂载目录,拷贝并修改配置文件)

详细步骤略,如有问题,请联系作者。

建议通过云服务器来练习:

实战2:Docker+JMeter+Grafana+Influxdb搭建可视化性能测试监控平台

详见:


常用命令回顾

具体含义见下图官方解释。

docker version

docker info

docker search

docker pull

docker images

docker rmi

docker run 

docker logs

docker ps

docker exec

docker start

docker restart

docker stop

docker status

docker rm

docker commit

docker build

docker inspect

docker cp

docker login

docker tag

docker push

更多:


docker 误删 恢复 docker误删镜像如何恢复_docker 误删 恢复_125


docker 误删 恢复 docker误删镜像如何恢复_java_126


最后记录一个问题


docker 误删 恢复 docker误删镜像如何恢复_centos_127


运维角度用docker:

参考资料:https://www.runoob.com/docker/docker-tutorial.html