一、概述

1.什么是docker

docker是一个应用容器引擎,基于 Go 语言,将应用程序装箱打包成独立的容器,确保应用程序在不同的环境下都能运行。Docker的主要目标是‘build ,ship and run any app,anywhere’,也就是说通过对应用程序组件的封装,分发,部署,运行等生命周期的管理。容器之间不会有交互接口,并且开销极低。

2.docker有什么优势

有时候开发过程中没问题,运维时换个环境就出错了。

docker直接将该springboot项目制作成一个镜像文件,直接部署linux即可,减少依赖冲突概率。

Docker最终解决了运行环境配置中的问题。----镜像文件底层封装好了

二、名词介绍

镜像:类似于安装包,有运行的文件和配置信息文件。

容器:镜像运行的实例

仓库:存放镜像的地方

容器和虚拟机的区别:

虚拟机:虚拟硬件。在虚拟机上我们安装操作系统linux镜像。然后在操作系统上安装软件。

docker:操作系统层面的虚拟化。可以看做容器的管理器,依赖和应用都被打包在镜像中了,实际上docker中的镜像大小肯定会大于直接安装时候的大小。因为镜像中打包的还有他的依赖。容器和容器之间是隔离的。

特性

容器

虚拟机

启动速度

秒级

分钟级别

硬盘使用

一般为MB

一般GB

性能

接近原生

弱于

系统支持量

单机支持上千个容器

一般几十个

隔离性

完全隔离

完全隔离

三、安装

查看安装成功的三种方法:查看版本号、查看进程、查看服务(守护进程)

  1. 1.通过 uname -r 命令查看你当前的内核版本

uname -r

2.使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum -y updat

该过程大概需要维持10分钟左右

3.卸载旧版本(如果安装过旧版本的话)

yum remove docker docker-common docker-selinux docker-engine

4.安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

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

5.设置yum源

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

6.可以查看所有仓库中所有docker版本,并选择特定版本安装

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

7.安装docker

sudo yum install -y docker-ce     #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版18.03.1

8.启动并加入开机启动

systemctl start docker

systemctl enable docker

9.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

四、原理

1.下载镜像原理

2.阿里云加速镜像

每个人的镜像地址都是不一样的。

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

依次执行给的代码。

五、常用命令

获取docker版本:

docker -version

查看镜像:

docker images

 查看镜像(只显示镜像id)

docker images -q

下载镜像、删除镜像: 

docker pull nginx
docker images
docker rmi nginx

查看容器

docker ps

查看容器的详情 

docker inspect 428175106d92

 运行容器

 docker run -i(保持容器一直运行)-t(给容器一个伪终端)-d(后台运行,不直接进入容器) --name=tomcat9.2(给启动容器起名字)-p 8080:8080(宿主:docker容器)tomcat:9.2(启动的容器)

docker run -itd --name=test_tomcat -p 8081:8080 tomcat

查看运行着的和停止的大容器:

docker ps -a
docker stop 428175106d92

删除容器: 

docker rm b4a5982f1adf

 启动容器并进入内部bash

 docker start 428175106d92
 docker exec -it 428175106d92 bash

我们可以看到容器也类似于一个小的linux系统,我们在这个上面运行镜像。

由容器创建镜像

docker commit -m=“提交的描述信息” -a=“作者” 容器ID 要创建的目标镜像名:[标签名]
docker commit -m="自创镜像" -a="hxq" fcbeb39f6b4c "myimage666":v1

 

六、docker数据卷

数据卷使得本机的文件和容器中环境的文件形成映射,当本机指定的文件(数据卷)修改时,容器中的文件也修改了。这样可以不用进入容器修改配置等。比如nginx的配置文件、tomcat的静态资源文件等等,数据卷很好用。

使用-v指定数据卷

docker run -p 81:80 -itd -v /usr/software/demo/nginxdemo/html/:/usr/share/nginx/html/ -v /usr/software/demo/nginxdemo/nginx.conf:/etc/nginx/conf.d/default.conf nginx

七、dockerfile创建自己的镜像

dockerfile文件

# 基础镜像使用java
FROM java:8
# 作者
MAINTAINER www.boyatop.com
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为boyatop.jar
ADD boyatop-thymeleaf-1.0-SNAPSHOT.jar boyatop.jar
# 运行jar包
RUN bash -c 'touch /boyatop.jar'
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/boyatop.jar"]
#暴露8080端口
EXPOSE 8080
Dockerfile 指令说明
FROM指定基础镜像,用于后续的指令构建。
MAINTAINER指定Dockerfile的作者/维护者。(已弃用,推荐使用LABEL指令)
LABEL添加镜像的元数据,使用键值对的形式。
RUN在构建过程中在镜像中执行命令。
CMD指定容器创建时的默认命令。(可以被覆盖)
ENTRYPOINT设置容器创建时的主要命令。(不可被覆盖)
EXPOSE声明容器运行时监听的特定网络端口。
ENV在容器内部设置环境变量。
ADD将文件、目录或远程URL复制到镜像中。
COPY将文件或目录复制到镜像中。
VOLUME为容器创建挂载点或声明卷。
WORKDIR设置后续指令的工作目录。
USER指定后续指令的用户上下文。
ARG定义在构建过程中传递给构建器的变量,可使用 "docker build" 命令设置。
ONBUILD当该镜像被用作另一个构建过程的基础时,添加触发器。
STOPSIGNAL设置发送给容器以退出的系统调用信号。
HEALTHCHECK定义周期性检查容器健康状态的命令。
SHELL覆盖Docker中默认的shell,用于RUN、CMD和ENTRYPOINT指令。

 创建镜像

docker build -f dockerfile -t 镜像名:版本号 .

七、dockercompose编排技术

使用编排技术极大简化部署

下载

链接:https://pan.baidu.com/s/12_ny6_UisdVazbZZClZmCg 
提取码:0505
 

mv docker-compose-Linux-x86_64 /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

docker-compose -v

Compose 使用的三个步骤:

  • 使用 Dockerfile 定义应用程序的环境。

  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。

  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

dockercompose.yml模版 

version: '3.0'
services:
  tomcat80: ##服务名称
    #container_name: tomcat8080 指定容器名称
    image: tomcat:8 #镜像文件名称 run images
    ports:  ###端口号的映射 -p
    - 8080:8080
    volumes: ## 数据源 宿主机与容器数据共享  -v
      - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:  ###定义网络的桥
      - boyatop

  tomcat81: ##服务名称
    #container_name: tomcat8080 指定容器名称
    image: tomcat:8 #镜像文件名称
    ports:  ###端口号的映射
      - 8081:8080
    volumes: ## 数据源 宿主机与容器数据共享
      - /usr/tomcat/webapps:/usr/local/tomcat/webapps
    networks:
      - boyatop
networks:  ## 定义服务的桥
  boyatop:

配置同一个网段就可以互相访问(curl指令可以互相访问)

-d后台启动 -f指定deckercompose.yml文件

docker-compose up -d

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐