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

安装docker-ce

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

安装所需软件包

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

设置镜像仓库

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

如果报错

改为

生成缓存:yum makecache fast

列出docker ce的版本

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

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

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

yum install docker-ce

查看版本

可以看到是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 rm -f 容器1 容器2

示例(含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目录在容器中会自动创建,可以看到宿主机对应目录下的文件

docker exec -it xxxxxxxxxxxx /bin/bash

容器中新增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

自定义镜像:qzcsbj7-influxdb_grafana

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

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

创建命名空间

创建镜像仓库

镜像推送到阿里云

下面给了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

docker安装、基本使用、实战(测试必备)的更多相关文章

  1. docker安装与测试 及 安装docker compose

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

  2. docker安装fastdfs与java客户端测试

    一.docker 安装FastDFS 1.拉取镜像 docker pull morunchang/fastdfs 2.创建并启动tracker容器 docker run -d --name=track ...

  3. Docker实战 | 第三篇:Docker安装Nginx,实现基于vue-element-admin框架构建的项目线上部署

    一. 前言 在上一文中 点击跳转 通过IDEA集成Docker插件实现微服务的一键部署,但 youlai-mall 是前后端分离的项目,除了后端微服务的部署之外,当然还少不了前端工程的部署.所以本篇讲 ...

  4. Docker - 安装&测试

    一.什么是Docker Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中 ...

  5. docker安装+测试环境的搭建---

    漏洞演练环境docker地址:http://vulhub.org/#/environments/ 环境:kali-linux-2017.2-amd64.iso 一.docker安装 1.先更新一波源: ...

  6. docker安装,基本使用,实战

    [docker概念作用术语] [使用docker的步骤] [docker安装及配置] [环境要求] docker要求centos7 必须要64位,内核3.1及以上 https://docs.docke ...

  7. Docker技术入门与实战 第二版-学习笔记-10-Docker Machine 项目-2-driver

    1>使用的driver 1〉generic 使用带有SSH的现有VM/主机创建机器. 如果你使用的是机器不直接支持的provider,或者希望导入现有主机以允许Docker Machine进行管 ...

  8. Docker从入门到实战(三)

    Docker从入门到实战(三) 一:安装Docker 1. linux系统脚本安装 Docker基于linux容器技术,面向服务器端,Docker只能安装运行在64位计算机上(社区有对32位的支持), ...

  9. Docker从入门到实战(二)

    Docker从入门到实战(二) 一:什么是docker Docker是一个开源的应用容器引擎,开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到主流的Linux.MacOS.Windo ...

随机推荐

  1. Web开发之HTTP协议

    HTTP响应消息 一个HTTP响应代表服务器向客户端回送的数据. 一个完整的HTTP响应包括如下内容: 一个状态行.若干消息头.以及响应正文,其中的一些消息头和正文都是可选的,消息头和正文内容之间要用 ...

  2. R语言服务器程序 Rserve详解

    R语言服务器程序 Rserve详解 R的极客理想系列文章,涵盖了R的思想,使用,工具,创新等的一系列要点,以我个人的学习和体验去诠释R的强大. R语言作为统计学一门语言,一直在小众领域闪耀着光芒.直到 ...

  3. [Eclipse插件] 编辑插件IndentGuide

    IndentGuide插件 将可配置的缩进指导线添加到Eclipse文本编辑器 如下图

  4. entity framework无法写入数据库.SaveChanges()失败

    参考https://stackoverflow.com/questions/26745184/ef-cant-savechanges-to-db/28256645 https://www.codepr ...

  5. Cesium中级教程1 - 空间数据可视化(一)

    Cesium中文网:http://cesiumcn.org/ | 国内快速访问:http://cesium.coinidea.com/ 本教程将教读者如何使用Cesium的实体(Entity)API绘 ...

  6. 浅谈MySQL同步到ElasticSearch的几种方式及其优缺点

    同步双写 优点:业务逻辑简单. 缺点: 硬编码,有需要写入mysql的地方都需要添加写入ES的代码: 业务强耦合: 存在双写失败丢数据风险: 性能较差:本来mysql的性能不是很高,再加一个ES,系统 ...

  7. Docker 与 K8S学习笔记(十九)—— Pod的配置管理

    我们在部署应用时常常会考虑将应用程序与配置文件相分离,这样可以使应用程序更好的复用,并且通过不同配置也能实现更灵活的功能.将应用制作成镜像后,我们可以在启动容器时通过环境变量或挂载文件的方式注入,但是 ...

  8. JavaScript如何实现上拉加载,下拉刷新?

    转载地址: 面试官:JavaScript如何实现上拉加载,下拉刷新? 一.前言 下拉刷新和上拉加载这两种交互方式通常出现在移动端中 本质上等同于PC网页中的分页,只是交互形式不同 开源社区也有很多优秀 ...

  9. Python解释器下载安装教程

    简介: 自从20世纪90年代初Python语言诞生至今,它已被逐渐广泛应用于系统管理任务的处理和Web编程.2021年10月,语言流行指数的编译器Tiobe将Python加冕为最受欢迎的编程语言,20 ...

  10. 无法自动装配。未找到 ‘xxxx’ 类型的 Bean。

    无法自动装配.未找到 'xxxx' 类型的 Bean. 1.解决办法 打开设置,找到编辑器->检查.把"自动装配Bean类",取消勾选,点击应用.确定.