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.对容器的启动/停止

 

下面进入实操,建议通过云服务器来练习:https://www.cnblogs.com/uncleyong/p/12694334.html

Docker安装及配置

环境要求

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

https://docs.docker.com/

 

 

 

 

 

 

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

 

 

 

安装centos7(安装文件加Q群获取):https://www.cnblogs.com/uncleyong/p/10739997.html

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

uname -r

 

安装

卸载旧版本

较旧的 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

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

 

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

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

否则拉取镜像报错

安装docker-ce

https://docs.docker.com/install/linux/docker-ce/ubuntu/

 

安装所需软件包

设置镜像仓库

如果报错

 

 改为

生成缓存 

安装

查看版本

可以看到是go语言写的

docker version

启动

systemctl start docker

查看状态

systemctl status docker

docker info

停止

systemctl stop docker

重启

systemctl restart docker

设置开机启动

systemctl enable docker

验证

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

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

docker run

 

配置镜像加速器

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

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

 

 

 

配置自己的docker加速器

最后执行重启命令:

 

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

镜像操作

查找

docker search 镜像名

 

参数说明:

NAME: 镜像仓库源的名称

DESCRIPTION: 镜像的描述

OFFICIAL: 是否 docker 官方发布

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

AUTOMATED: 自动构建。

 

也可以通过docker官网搜索mysql

 

点击查看详情

 

 

查看可以标签 

 

 

拉取

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

 

拉取完成

 

查看所有本地镜像

docker images

各个选项说明:

REPOSITORY:表示镜像的仓库源

TAG:镜像的标签(版本)

IMAGE ID:镜像ID

CREATED:镜像创建时间

SIZE:镜像大小

 

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

 

获取镜像详细信息

docker inspect 镜像id

 

上面id才是镜像的完整id

版本

端口

 

msyql数据文件

删除指定的本地镜像

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

 

 

容器操作

运行容器

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

@后面是容器的id

退出并关闭容器 

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

查看容器

docker ps -a

可以看到状态是Exited

-q,只显示容器id

docker ps -aq

启动容器

docker start

只显示运行的,docker ps

停止容器

docker stop

删除容器

docker rm

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

批量删除容器

docker rm -f $(docker ps -aq)

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

 

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

192.168.0.105:8080

删除容器

docker rm

运行容器 

 

可以访问,但是报404

192.168.0.105:9999

加入容器

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

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

 

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

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

改名后

更新镜像:docker commit

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

-m是描述,-a是作者

通过新镜像,运行容器

加上版本

访问,成功

192.168.0.105:8888

tomcat后台运行,-d

先删除容器

 

 

返回了完整容器id

查看,docker ps

只显示12位容器id

 

停止

 

启动

 

查看日志

docker logs 容器id或者容器名称

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

 

拷贝

宿主机拷贝到容器中

docker cp

可以访问到

192.168.0.105:8888

容器拷贝到宿主机

拷贝到当前目录

在宿主机中可以看到

 

挂载

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

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

 

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

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

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

获取元信息

docker inspect 容器id

 

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

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

 

包含了jdk

创建镜像(含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是如何写的

 

指定基础镜像、环境变量

 

暴露端口8080

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

   

自定义tomcat镜像

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

 

 

 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 run \
--name qzcsbj_tomcat \
-p 8181:8080 \
-d qzcsbj/tomcat:1.0

  

 

192.168.0.105:8181

 

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

创建命名空间

 

创建镜像仓库

 

 

 

镜像推送到阿里云

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

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 login --username=qzcsbj registry.cn-hangzhou.aliyuncs.com  

指定镜像tag归入仓库

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

将镜像推送到仓库

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

 

push成功

 

 

push的镜像

层信息

 

 搜索镜像

 

镜像信息

 

也可以修改信息

 

实战1:使用Docker搭建环境

安装tomcat,部署war包

拉取刚刚push的tomcat镜像

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

 

 

 

war包在Q群文件

 

运行容器

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

 

 

192.168.0.105:8184/qzcsbj_springboot_war/test

war包对应的代码:

 

安装mysql、nginx、redis

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

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

 

建议通过云服务器来练习:https://www.cnblogs.com/uncleyong/p/12694334.html

 

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

 

 

详见:

https://www.cnblogs.com/uncleyong/p/11885192.html

 

常用命令回顾

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

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:https://www.cnblogs.com/uncleyong/p/10069429.html

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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM