Docker入门及spring部署

Docker入门

一.简述

1. Docker是什么

  1. Docker是基于Go语言实现的云开源项目,诞生于2013年初,最初是dotCloud公司发起。
  2. Docker通过对应用组件的封装、分发、部署、运行等生命周期的管理,达到应用组件级别的“一次封装,到处运行”。这里应用组件,即可以是Web应用,也可以是一套数据库服务,甚至是一个操作系统或编译器。

2. Docker作用

  1. 快速搭建重复环境

    案例一
    前几天,公司一批服务器就要到期了,由于服务器是15年购买的,硬件的性能远比现在新出的云主机低,因此决定把所有服务器都换成新一代服务器,但是正准备动手迁移服务器时,内心一阵阵崩溃感涌上心头,仔细一算,每台服务器都要做同样的事情。安装jdk,tomcat,nginx,设置jdk环境变量。。。后来决定用docker部署的办法,在每台服务器都把docker安装之后,只需要在其中一台服务器中把Tomcat镜像从镜像仓库拉取下来,把这些配置都设置好,做成一个自己的镜像上传到镜像仓库中,之后在其他几台服务器都下载自己做的镜像,运行于docker中,把代码上传,就万事大吉了。

  2. 保证开发测试等环境完全相同

    案例二
    前不久的圣诞活动中,公司临时的活动方案在程序员的加班加点中终于上线,但是一上线之后发现推广海报中的中文名字乱码,领导问责测试人员怎么没做好测试,测试很委屈的说我已经测试无数遍并且测试报告都提交了,解决了所有问题才上线的;没办法只能让服务器同事查看正式服务器中的tomcat配置,发现原来 tomcat用了默认编码方式:iso8859-1,而测试环境中是UTF-8。针对这个问题,项目组决定把开发环境迁移到docker中,在测试环境中测试无误后,把镜像打包发布到正式环境中,解决了环境不同导致的问题。

3. Docker组成

  • 镜像(Image)
  • 容器(Container)
  • 仓库(Repository)

4. Docker通俗理解

Docker要理解就只需要两句口号

  1. “Build, Ship and Run (搭建、发送、运行)”

    在这里插入图片描述
    例子1
    我来到一片空地,想建个房子,于是我搬石头、砍木头、画图纸,一顿操作,终于把这个房子盖好了。
    结果,我住了一段时间,想搬到另一片空地去。这时候,按以往的办法,我只能再次搬石头、砍木头、画图纸、盖房子。
    但是,跑来一个老巫婆,教会我一种魔法。
    这种魔法,可以把我盖好的房子复制一份,做成“镜像”,放在我的背包里。
    等我到了另一片空地,就用这个“镜像”,复制一套房子,摆在那边,拎包入住。

  2. “Build once,Run anywhere(搭建一次,到处能用)”。

    例子2
    我刚才例子里面,那个放在包里的“镜像”,就是Docker镜像。而我的背包,就是Docker仓库。我在空地上,用魔法造好的房子,就是一个Docker容器。
    说白了,这个Docker镜像,是一个特殊的文件系统。它除了提供容器运行时所需的程序、库、资源、配置等文件外,还包含了一些为运行时准备的一些配置参数(例如环境变量)。镜像不包含任何动态数据,其内容在构建之后也不会被改变。
    也就是说,每次变出房子,房子是一样的,但生活用品之类的,都是不管的。谁住谁负责添置。
    每一个镜像可以变出一种房子。那么,我可以有多个镜像呀!
    也就是说,我盖了一个欧式别墅,生成了镜像。另一个哥们可能盖了一个中国四合院,也生成了镜像。还有哥们,盖了一个非洲茅草屋,也生成了镜像。。。这么一来,我们可以交换镜像,你用我的,我用你的,岂不是很爽?

二.Docker安装

注意:Linux centOS(版本大于等于7.0)

1. 删除旧版本

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

2. 安装必备工具

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

3. 添加Docker源

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

4. 更新yum缓存

yum makecache fast

5. 安装

yum install docker-ce

6. 创建docker用户

  1. 创建docker_mananger用户
useradd docker_manager
  1. 设置密码
passwd docker_manager  

docker_manager_wkt

7. 配置docker权限

visudo

visudo 是配置用户权限的文件,在命令行中输入 visudo 回车之后,会进入文件操作,找到 “# %wheel ALL=(ALL) NOPASSWD: ALL” 这一行,把前面的 “#” 去掉,保存文件

8. 授权

usermod -aG wheel,docker docker_manager

9. 启动DockerCE

sudo systemctl enable docker

sudo systemctl start docker

查看是否启动成功

docker info

10. 镜像加速

vim /etc/docker/daemon.json

添加以下内容

{
  "registry-mirrors": [
    "https://registry.docker-cn.com"
  ]
}

通知systemd重载此配置文件

systemctl daemon-reload

重启docker服务

systemctl restart docker

三.Docker常用命令

镜像操作

1. 列出本地现有 image

docker image ls

2. 删除 image

docker image rm image_name

3. 下载 image

docker image pull  image_name

容器操作

1. 从 image 生成 container 实例

# 新版本
docker container run image_name

# 老版本
docker run image_name

2. 关闭一个容器

# 通过docker强制关闭contaniner
docker container kill container_ID

# 向 container 发送关闭信号,让 container 自己决定如何恰当的关闭
docker container stop container_ID

3. 列出已有的容器

# 列出正在运行的容器
docker container ls

# 列出全部容器
docker container ls --all

4. 运行已经存在的容器

docker container start container_ID

5. 删除容器

docker container rm container_name (或 container_ID)

# 另:在运行 image 产生 container 的时候就加上 --rm 参数,告诉 docker 只要这个 container 一退出,就删除它
docker run -it --rm ...

6. 从容器中拷贝文件到本机

docker container cp container_ID:path_to_file  host_path

7. 进入一个正在运行的容器

docker container exec -it container_ID  /bin/bash (或者只写 bash)

8. 后台运行容器

docker container run  -d  image_name

其他

1. 查看现有的网络

docker network ls

现象

NETWORK ID          NAME                DRIVER              SCOPE
c749b1b83091        bridge              bridge              local
a23ca96b3291        host                host                local
74d0c66e9190        none                null                local

如果在运行 container 时不设定 network,则默认是第一个 bridge network .
此时,如果 container expose 某个 port,例如 8080,则 bridge network 中的其他程序可以通过这个 port 与它通信。
如果 host network 中程序想与它通讯,必须设置一个端口映射 -p 5000:8080,这样所有与 host network 5000 端口通讯的都可以被映射到 container8080 端口。
也可以让 container 直接运行在 host network 中,这就是为什么在很多运行 image 的命令中,都有 --net=host 设置。
这样的话,就可以直接通过 host 的端口进行通讯了,不需要桥接映射。

2. 文件共享

docker run -v ~/shared_files:/home/docker_user/log_files  image_name

# -v /host_path:/container_path 来设置两个系统之间的共享文件夹。

四.创建自定义镜像

1. 用命令更新镜像

  1. 根据基础镜像,创建容器
docker run --name mytomcat -p 80:8080 -d tomcat
  1. 修改容器内容
docker exec -it mytomcat /bin/bash

cd webapps/ROOT

rm -f index.jsp

echo hello world > index. html

exit
  1. 提交为新镜像
docker commit -m="描述消息" -a="作者" 容器ID或容器名 镜像:TAG

# 例:
# docker commit -m="修改了首页" -a="测试" mytomcat zong/tomcat:v1.0
  1. 使用新镜像运行容器
docker run --name tom -p 8080:8080 -d zong/tomcat:v1.0

2. 用Dockerfile构建镜像

  1. 创建一个Dockerfile文件 vi Dockerfile
#注意dockerfile指令须大写

FROM tomcat

MAINTAINER zong

RUN rm -f /usr/local/tomcat/webapps/ROOT/index.jsp

RUN echo "<h1>hello world2<h1>" > /usr/local/tomcat/webapps/ROOT/index.html
  1. 构建新镜像
docker build -f Dockerfile -t zong/tomcat:v2.0 .

# -f Dockerfile路径,默认是当前目录
# -t 指定新镜像的名字以及TAG

五.使用Dockerfile构建Spring应用镜像

1.准备

  1. 把你的spring boot项目打包成可执行jar包
  2. 把jar包上传到Linux服务器

2.构建

a.命令构建

  1. 拉取tomcat文件 : docker pull 镜像NAME:镜像TAG
docker pull tomcat:8.5
  1. 挂载文件并启动
docker run -d -p 8098:8080 -v /data/my_tomcat_1/webapps:/usr/local/tomcat/webapps  --name my_tomcat_1  tomcat:8.5
  • 参数解释
参数 含义
-d 后台运行
-p 8098 : 8080 把容器运行的 8080 端口映射到 host8098 端口
-v /data/my_tomcat_1/webapps : /usr/local/tomcat/webapps 用来将容器目录挂载在host主机上,前面的路径是host主机目录
–name my_tomcat_1 给容器起个名字:my_tomcat_1
tomcat:8.5 tomcat是下载的镜像的NAME。8.5是镜像TAG

b.文件构建

  1. 在jar包路径下创建Dockerfile文件vi Dockerfile
# 指定基础镜像,本地没有会从dockerHub pull下来
FROM java:8

# 可执行jar何复制到基础镜像的根目录下
ADD test.jar /test.jar

# 镜像要暴露旳端口,如要使用端口,在执行docker run命令时使用-p生效
EXPOSE 8080

# 在镜像运行为容器后执行旳命令
ENTRYPOINT ["java", "-jar", "/test.jar"]
  1. 使用 docker build 命令构建镜像,基本语法
docker build -f Dockerfile -t zong/mypro:v1 .

# -f 指定Dockerfile文件的路径
# -t 指定镜像名字和TAG
# . 指当前目录,这里实际上需要一个上下文路径
  1. 通过DockerFile部署tomcat
    在这里插入图片描述

3.运行

运行自己的spring boot镜像

docker run --name pro -p 80:80 -d 镜像名:TAG
发布了96 篇原创文章 · 获赞 26 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/qq919694688/article/details/103347983