docker的入门基础

目录

Docker介绍

Docker原理

Docker组成

Docker安装

Docker配置

Docker启动

关闭防火墙

关闭selinux

启动Docker

检查启动状态

Docker常用命令

下载镜像

运行容器

查看本机所有的镜像

查看本机的容器

停止容器

删除容器

删除镜像

项目实战

vue前端项目

下载源码

下载node镜像

编译前端项目

java后端项目

下载源码

下载maven镜像

编译后端项目

运行后端项目

中级篇

自定义镜像

Dockerfile介绍

Dockerfile常用指令

通过Dockerfile构建自己的镜像

上传镜像

登录

标记镜像

上传镜像

搜索镜像

下载自定义镜像

高级篇


 

Docker介绍

Docker 是世界领先的软件容器平台。开发人员利用 Docker 可以消除协作编码时“在我的机器上可正常工作”的问题。

运维人员利用 Docker 可以在隔离容器中并行运行和管理应用,获得更好的计算密度。

企业利用 Docker 可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为 Linux 和 Windows Server 应用发布新功能。

 

Docker原理

Docker底层是利用了Linux系统的namespace和cgroups技术达到轻量虚拟化。

Docker组成

Docker由镜像(images)、容器(Container)、仓库(Registry)组成。

  • 镜像为静态的概念,比如windows系统的iso文件;
  • 容器为动态时的概念,比如已安装好运行起来的操作系统;
  • 仓库主要是用于存放、管理镜像。

 

Docker安装

首先准备一个纯净的CentOS 7.4及以上的虚拟机,确保虚拟机可以连接外网。

将以下文件上传虚拟机的/etc/yum.repos.d/目录下面:

注:上传工具可使用lrzsz、xftp等等

docker-ce.repo

最后执行一下命令开始安装:

# 注意以下命令需要在root用户执行

 

yum makecache fast

 

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

 

Docker配置

安装成功后,最后还需要一些简单配置,将以下文件上传到虚拟机的/etc/docker/目录下面。

若没有该目录可以先创建一下:mkdir -p /etc/docker

daemon.json

 

Docker启动

在启动Docker之前,我们需要先关闭防火墙等安全措施,方便后续安装完成后的访问。

 

关闭防火墙

systemctl stop firewalld

systemctl disable firewalld

systemctl mask firewalld

 

 

关闭selinux

临时关闭

setenforce 0

  

永久关闭

sed -i "s#SELINUX=enforcing#SELINUX=disabled#g" /etc/selinux/config

 

 

启动Docker

systemctl start docker

 

检查启动状态

systemctl status docker

出现绿色的active (running),则表示已启动成功了。

 

Docker常用命令

下载镜像

默认从官方的镜像仓库中下载,官方仓库地址:https://hub.docker.com

docker pull [镜像名称]:[镜像tag]

 

 

比如:docker pull openjdk:8

 

运行容器

我们可以直接运行一个容器,当这个容器的镜像不存在时,将会自动进行下载。

docker run -dp 80:80 [镜像名称]:[镜像tag]

 

 

比如:docker run --name nginx -dp 80:80 nginx:latest

命令参数介绍

--name:容器名称

-dp是两个参数的组合:

  • -d:daemon以守护后台进程的方式运行
  • -p:端口映射,将本地的端口映射到容器内的端口

latest表示最新的版本

 

查看本机所有的镜像

docker images

 

查看本机的容器

查看正在运行的容器

docker ps

 

 

查看所有的容器

docker ps -a

 

停止容器

docker stop [容器ID]或[容器名称]

 

 

比如:

docker stop 54d8a89dcc8f

docker stop nginx

 

删除容器

需要注意的是,不能直接删除正在运行的容器,需要先将容器停止,再删除。

docker rm [容器ID]或[容器名称]

 

 

比如:

docker rm 54d8a89dcc8f

docker rm nginx

 

删除镜像

这里需要注意,要删除的镜像必须是当前没有基于该镜像启动的容器,如果有则需要先停止并删除容器。

docker rmi [镜像ID]或[镜像名称]:[镜像tag]

 

 

比如:

docker rmi dbfc48660aeb

docker rmi nginx:latest

 

项目实战

上面已经介绍了Docker的基础知识,现在我们再来用实际的项目操作一下。

再开始之前先安装git工具,方便下载源代码。

yum install -y git


vue前端项目

下载源码

我们通过git下载前端vue示例项目源码:

git clone http://git.paasdev.k2software.cn/demo/luhy-vue-demo.git

源码下载好了以后,我们还需要借助node进行编译,在没使用docker之前,我们还需要去官网下载node然后进行安装配置环境变量等,现在不需要了。

我们可以通过docker直接拉取node镜像,然后在镜像中编译我们的源码。最大地降低主机环境的污染。

 

下载node镜像

# 拉取node镜像

 

 

docker pull node:alpine

 

编译前端项目

启动容器

我们下载好源码和node镜像之后,就可以启动node镜像,并且将源码挂载到容器内,就可以进行编译了。

docker run --name node -it --rm -v /root/luhy-vue-demo:/opt node:alpine sh

命令参数:

  • -it:分配一个提供输入输出的伪终端
  • --rm:用完退出容器后,自动删除容器
  • -v: 挂载本地目录到容器内,这里表示将本地的/rooit/luhy-vue-demo目录挂载到容器的/opt目录下面
  • sh:启动容器后执行sh命令,得到一个命令输入输出环境

 

通过cd /opt,进入/opt目录,可以执行ls命令,看一下目录是否挂载成功了。

 

编译项目

# 设置淘宝镜像源

npm config set registry https://registry.npm.taobao.org

 

npm install

npm run build

 

运行前端项目

构建编译完成后,在当前目录下会生成一个dist的目录,这个就是我们最终需要的文件了。

我们现在再退出容器,执行exit

要将项目运行起来,通过web页面可以访问,我们还需要一个nginx镜像,用于访问前端的文件。

# 下载nginx镜像

docker pull nginx

 

# 运行容器

docker run --name nginx -dp 80:80 -v /root/luhy-vue-demo/dist:/usr/share/nginx/html nginx

浏览器访问:http://[虚拟机IP]

即可看到访问后的页面,正常情况应该是看到vue页面了

 

java后端项目

下载源码

我们通过git下载后端springboot示例项目源码:

git clone http://git.paasdev.k2software.cn/demo/luhy-maven-demo.git

源码下载好了以后,我们还需要借助maven进行编译,在没使用docker之前,我们还需要去官网下载jdk和maven然后进行安装配置环境变量等,现在不需要了。

我们可以通过docker直接拉取maven镜像,然后在镜像中编译我们的源码。

 

下载maven镜像

# 拉取maven镜像,该镜像中已默认集成了jdk

 

docker pull maven:alpine

 

编译后端项目

启动容器

docker run -it --rm --name maven -v /root/luhy-maven-demo:/opt maven:alpine sh

启动运行参数这里就不再重复介绍了,上面已有。

通过cd /opt,进入到/opt目录,可以执行ls命令,看一下目录是否挂载成功了。

 

编译项目

mvn clean package -s ./settings.xml

编译项目需要下载很多依赖,需要几分钟时间。

 

运行后端项目

构建编译完成后,在当前目录下会生成一个target的目录,在这个目录中有我们需要的ROOT.war文件。

我们现在再退出容器,执行exit

要将项目运行起来,通过web页面可以访问,我们还需要一个tomcat镜像,用于访问后端接口。

# 拉取tomcat镜像

docker pull tomcat:8-alpine

 

 

# 创建一个webapps目录用于存放我们构建生成的war文件

mkdir -p /root/webapps

cp /root/luhy-maven-demo/target/ROOT.war /root/webapps

 

 

# 启动容器

docker run -dp 8080:8080 -v /root/webapps:/usr/local/tomcat/webapps tomcat:8-alpine

浏览器访问:http://[虚拟机IP]:8080

即可看到访问后的页面,正常情况应该是返回了Hello,World

 

 

中级篇

自定义镜像

在基础篇中,我们一直都用的是别人官方打包好的镜像,那我们自己的应用如何也打包成一个镜像呢

这就需要我们来制作自定义的镜像了。

Dockerfile介绍

自定义镜像需要依赖一个Dockerfile文件,

Dockerfile 是一个文本文件,其内包含了一条条的指令(Instruction),每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建。

Dockerfile常用指令

FROM

所谓定制镜像,那一定是以一个镜像为基础,在其上进行定制。而 FROM 就是指定基础镜像,因此一个 Dockerfile 中 FROM 是必备的指令,并且必须是第一条指令

 

COPY

顾名思义,COPY就是将本地的一个文件或目录复制到镜像中,这在我们制作镜像时很常用。

 

RUN

就是在镜像中运行一条命令,它将会生成一层镜像,最好不要用的太多。

 

CMD

容器启动时,执行的命令,也就是我们通过docker run命令,在容器启动后,第一时间执行的命令。

 

更多的指令可以参看官方文档:https://docs.docker.com/engine/reference/builder/#from

通过Dockerfile构建自己的镜像

制作前端项目镜像

我们先进入到前端项目目录,cd /root/luhy-vue-demo

里面已经有了一个Dockerfile,其中文件内容如下,大家也可以试着自己编写一下:

FROM nginx:alpine

 

 

COPY dist /usr/share/nginx/html

 

 

CMD ["nginx""-g""daemon off;"]


 

构建镜像

 

docker build . -t luhy-vue-demo:v1

不要溜了中间的点,它表示在当前目前下找Dockerfile文件进行构建生成镜像。

-t 表示生成的镜像名字

 

运行容器

 

docker run -dp 81:80 luhy-vue-demo:v1

浏览器访问:http://[虚拟机IP]:81

即可看到访问后的页面,正常情况应该是看到vue页面了

 

制作后端项目镜像

我们先进入到后端项目目录,cd /root/luhy-maven-demo

里面已经有了一个Dockerfile,其中内容如下:

FROM tomcat:8-alpine

 

RUN rm -rf /usr/local/tomcat/webapps/ROOT

 

COPY target/ROOT.war /usr/local/tomcat/webapps/

 

CMD ["catalina.sh""run"]

 

构建镜像

docker build . -t luhy-maven-demo:v1

 

运行容器

docker run -dp 8081:8080 luhy-maven-demo:v1

浏览器访问:http://[虚拟机IP]:8081

即可看到访问后的页面,正常情况应该是返回了Hello,World

 

上传镜像

我们构建完了自己的镜像还不够,如何把我们的镜像上传到仓库,在其他任意地方都可以使用,才是其真正价值所在。

它实现了一次构建,处处运行的目标。

镜像仓库又分为2种:公开仓库和私有仓库。

  • 公开仓库:dockerHub,官方的仓库,地址为:docker.io,页面访问:https://hub.docker.com
  • 私有仓库:几乎每个使用Docker的公司都有自己的私有仓库。比如我们PaaS平台,目前开发环境仓库地址为:docker.paastest.nebulogy.com

 

这里公开仓库需要大家自己去注册一个账号,我这里就不多演示了。可以先用一下我们的私有仓库。

登录

在上传镜像之前,需要先登录仓库,我们私有仓库的默认账号密码为admin/admin123

通过执行以下命令进行登录:

docker login docker.paastest.nebulogy.com -u admin -p admin123

如果出现:Login Succeeded,则表示登陆成功了。

 

标记镜像

我们之前构建的镜像都是没有带私有仓库前缀的,所以默认就是官方仓库,这里我们要把之前的镜像标记为我们的私有仓库镜像。

# 前端项目标记

docker tag luhy-vue-demo:v1 docker.paastest.nebulogy.com/luhy-vue-demo:v1

 

 

# 后端项目标记

docker tag luhy-maven-demo:v1 docker.paastest.nebulogy.com/luhy-maven-demo:v1

 

上传镜像

标记完成后,我们就可以上传镜像到我们的私有仓库了。

# 上传前端镜像

docker push docker.paastest.nebulogy.com/luhy-vue-demo:v1

 

 

# 上传后端镜像

docker push docker.paastest.nebulogy.com/luhy-maven-demo:v1

 

搜索镜像

我们最后还可以搜索私有仓库中已有的镜像。

docker search docker.paastest.nebulogy.com/luhy-vue-demo

 

下载自定义镜像

仓库已经有了我们的镜像,现在我们可以在其他任意有安装Docker的环境下,拉取我们的镜像了。

# 拉取镜像

docker pull docker.paastest.nebulogy.com/luhy-vue-demo:v1

 

 

# 运行容器

docker run -dp 82:80 docker.paastest.nebulogy.com/luhy-vue-demo:v1

这样就真正的实现了一次构建,处处运行的理念思想了。

 

高级篇

结合CI/CD自动构建自定义镜像、上传镜像、运行容器

 

 

你可能感兴趣的:(Docker)