目录

1、通过DockerFile生成Image

(1)创建一个Spring Boot项目。

(2)编写测试Controller

(3)项目打包

(4)项目上传服务器

(5)编写Dockerfile文件

(6)基于Dockerfile构建镜像

(7)基于image创建container

(8)查看启动日志

(9)宿主机上访问

2、从Container生成Image

(1) 先使用下载的镜像启动容器。

(2) 在容器中添加 yum和vim 两个应用。

(3) 使用 docker commit 命令来提交更新后的副本。

(4) 使用 docker images 来查看新创建的镜像。

(5) 可以使用新的镜像来启动容器

3、搭建本地仓库harbor

(1)访问github上的harbor项目

(2)下载版本,比如1.7.1

(3)找一台安装了docker-compose[这个后面的课程会讲解],上传并解压

(4)进入到harbor目录

(5)安装harbor,需要一些时间

(6)浏览器访问,比如39.100.39.63,输入用户名和密码即可

4、安装Bridge-Utils


1、通过DockerFile生成Image

(1)创建一个Spring Boot项目。

直接通过官网来生成,https://start.spring.io/

Mesos docker 运用案例分析 docker项目案例_jar

 

(2)编写测试Controller

自定义一个测试用Controller,启动项目后,测试是否可用。

@RestController
 public class DockerController {
     @GetMapping("/dockerfile")
     @ResponseBody
     String dockerfile() {
         return "hello docker" ;
     }
 }
C:\Users\tracy.chen>curl http://localhost:8080/dockerfile
 hello docker
 C:\Users\tracy.chen>

(3)项目打包

运行mvn clean install,将项目打包成jar文件docker-file-demo-0.0.1-SNAPSHOT.jar

(4)项目上传服务器

在服务器上新建文件夹,并将jar文件上传。

我这边用的阿里云ECS,废了不少功夫才上传上去。

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# ll
 total 16320
 -rw-r--r-- 1 root root 16495154 Jul 16 21:59 docker-file-demo-0.0.1-SNAPSHOT.jar
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]#

(5)编写Dockerfile文件

创建dockerfile文件,并编辑内容。

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# ll
 total 16116
 -rw-r--r-- 1 root root      204 Jul 16 22:26 Dockerfile
 -rw-r--r-- 1 root root 16495154 Jul 16 21:59 docker-file-demo-0.0.1-SNAPSHOT.jar
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# cat Dockerfile 
 FROM openjdk:8
 MAINTAINER lucas.chen
 LABEL name="docker-file-demo" version="1.0" author="lucas.chen"
 COPY docker-file-demo-0.0.1-SNAPSHOT.jar dockerfile-demo.jar
 CMD ["java","-jar","dockerfile-demo.jar"]

(6)基于Dockerfile构建镜像

docker build -t 自定义镜像名 .

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# docker build -t dockerfile-demo .
 Sending build context to Docker daemon   16.5MB
 Step 1/5 : FROM openjdk:8
 8: Pulling from library/openjdk
 e9afc4f90ab0: Already exists 
 989e6b19a265: Already exists 
 af14b6c2f878: Already exists 
 5573c4b30949: Already exists 
 fb1a405f128d: Already exists 
 197b0f525c26: Pull complete 
 f133ed18caca: Pull complete 
 Digest: sha256:7363057a9a679338e55920a57513e9077b193d94425f4d2db13766d3ff1c031e
 Status: Downloaded newer image for openjdk:8
  ---> b190ad78b520
 Step 2/5 : MAINTAINER lucas.chen
  ---> Running in 28b0a82f7530
 Removing intermediate container 28b0a82f7530
  ---> 261639c2587f
 Step 3/5 : LABEL name="docker-file-demo" version="1.0" author="lucas.chen"
  ---> Running in 2b5a24361dbf
 Removing intermediate container 2b5a24361dbf
  ---> ec898c16b323
 Step 4/5 : COPY docker-file-demo-0.0.1-SNAPSHOT.jar dockerfile-demo.jar
  ---> 3ba778f9a9a7
 Step 5/5 : CMD ["java","-jar","dockerfile-demo.jar"]
  ---> Running in 55a9a8455857
 Removing intermediate container 55a9a8455857
  ---> ca4d859482c1
 Successfully built ca4d859482c1
 Successfully tagged dockerfile-demo:latest
 
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# docker images
 REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
 dockerfile-demo            latest              ca4d859482c1        3 minutes ago       527MB
 james821/tomcat.lucas      1.0                 aba402c4a427        14 hours ago        791MB
 tomcat.lucas               1.0                 aba402c4a427        14 hours ago        791MB
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]#

(7)基于image创建container

docker run

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# docker run -d --name dockerfile -p 9999:8080 dockerfile-demo
 dbd499b2e3fe2b07190755a30c9b73757f8ceb9f6ec7980ddaa7cb6a1c859e48
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# docker ps
 CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
 dbd499b2e3fe        dockerfile-demo     "java -jar dockerfil…"   6 seconds ago       Up 4 seconds        0.0.0.0:9999->8080/tcp   dockerfile

(8)查看启动日志

docker logs

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# docker logs dockerfile
 
   .   ____          _            __ _ _
  /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
 ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
  \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
   '  |____| .__|_| |_|_| |_\__, | / / / /
  =========|_|==============|___/=/_/_/_/
  :: Spring Boot ::        (v2.3.1.RELEASE)
 
 2020-07-17 02:15:32.191  INFO 1 --- [           main] c.e.d.DockerFileDemoApplication          : Starting DockerFileDemoApplication v0.0.1-SNAPSHOT on dbd499b2e3fe with PID 1 (/dockerfile-demo.jar started by root in /)
 2020-07-17 02:15:32.199  INFO 1 --- [           main] c.e.d.DockerFileDemoApplication          : No active profile set, falling back to default profiles: default
 2020-07-17 02:15:34.818  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
 2020-07-17 02:15:34.854  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
 2020-07-17 02:15:34.854  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.36]
 2020-07-17 02:15:35.111  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
 2020-07-17 02:15:35.111  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2788 ms
 2020-07-17 02:15:36.001  INFO 1 --- [           main] o.s.s.concurrent.ThreadPoolTaskExecutor  : Initializing ExecutorService 'applicationTaskExecutor'
 2020-07-17 02:15:36.534  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
 2020-07-17 02:15:36.575  INFO 1 --- [           main] c.e.d.DockerFileDemoApplication          : Started DockerFileDemoApplication in 5.326 seconds (JVM running for 6.195)
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]#

(9)宿主机上访问

[root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]# curl 127.0.0.1:9999/dockerfile
 hello docker
 [root@iZ2zef4zu0mvk0hhwa0il1Z firstdockerfile]#

2、从Container生成Image

通常Docker镜像都不支持yum和vim命令,我们安装一个yum和vim,然后生成新的镜像。

(1) 先使用下载的镜像启动容器。

[root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker images
 REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
 mongo                      4.4.0-rc11          8c7720f503aa        2 weeks ago         492MB
 redis                      alpine              b546e82a6d0e        5 weeks ago         31.5MB
 haproxy                    latest              14fcadff50a5        5 weeks ago         92.4MB
 tomcat                     latest              2eb5a120304e        5 weeks ago         647MB
 mysql                      5.7                 9cfcce23593a        5 weeks ago         448MB
 hello-world                latest              bf756fb1ae65        6 months ago        13.3kB
 perconalab/pxc-openshift   latest              a6fa4d81c1e2        13 months ago       611MB
 swarm                      latest              ff454b4a0e84        2 years ago         12.7MB
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker run -d tomcat
 c0af76bf294cc7571724f9ee093ba3aa780522c75275ac91d4cf6c18989085c2
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 c0af76bf294c        tomcat              "catalina.sh run"   4 seconds ago       Up 2 seconds        8080/tcp            unruffled_dirac
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]#

注意:记住容器的 ID,稍后还会用到。

(2) 在容器中添加 yum和vim 两个应用。

root@c0af76bf294c:/usr/local/tomcat# apt-get update
 ...省略安装过程...
 
 root@c0af76bf294c:/usr/local/tomcat# apt-get install vim -y
 ...省略安装过程...
 
 root@c0af76bf294c:/usr/local/tomcat# apt-get install yum -y
 ...省略安装过程...

当结束后,我们使用 exit 来退出,现在我们的容器已经被我们改变了。

(3) 使用 docker commit 命令来提交更新后的副本。

-m 来指定提交的说明信息,跟我们使用的版本控制工具一样;

-a 可以指定更新的用户信息;之后是用来创建镜像的容器的 ID;最后指定目标镜像的仓库名和 tag 信息。

创建成功后会返回这个镜像的 ID 信息。

[root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker ps
 CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
 c0af76bf294c        tomcat              "catalina.sh run"   57 minutes ago      Up 57 minutes       8080/tcp            unruffled_dirac
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker commit -m "add yum and vim" -a "lucas.chen" c0af76bf294c tomcat.lucas:1.0
 sha256:aba402c4a427d25e4a10e10e5e94b8e3e2b3a5911d6f9af669380e069c256d29
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]#

(4) 使用 docker images 来查看新创建的镜像。

[root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker images
 REPOSITORY                 TAG                 IMAGE ID            CREATED             SIZE
 tomcat.lucas               1.0                 aba402c4a427        31 seconds ago      791MB

(5) 可以使用新的镜像来启动容器

[root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker run -d tomcat.lucas:1.0 
 f98fa428ac25c360410d6be498177c1f66c145039cf942ba5ffdffecadbe0fcc
 
 [root@iZ2zef4zu0mvk0hhwa0il1Z ~]# docker ps
 CONTAINER ID        IMAGE                   COMMAND             CREATED             STATUS              PORTS               NAMES
 f98fa428ac25        tomcat.lucas:1.0        "catalina.sh run"   3 seconds ago       Up 2 seconds        8080/tcp            zealous_kowalevski

进入新的容器,发现已经自带vim和yum命令了。


3、搭建本地仓库harbor

(1)访问github上的harbor项目

https://github.com/goharbor/harbor

(2)下载版本,比如1.7.1

https://github.com/goharbor/harbor/releases

(3)找一台安装了docker-compose[这个后面的课程会讲解],上传并解压

tar -zxvf xxx.tar.gz

(4)进入到harbor目录

修改harbor.cfg文件,主要是ip地址的修改成当前机器的ip地址

同时也可以看到Harbor的密码,默认是Harbor12345

(5)安装harbor,需要一些时间

sh install.sh

(6)浏览器访问,比如39.100.39.63,输入用户名和密码即可


4、安装Bridge-Utils

我是阿里云ECS机器,Centos8系统,首先网上找资料,都说要通过命令执行安装bridge-utils。

[root@iZ2zef4zu0mvk0hhwa0il1Z ~]# yum install -y bridge-utils
 Repository AppStream is listed more than once in the configuration
 Repository extras is listed more than once in the configuration
 Repository PowerTools is listed more than once in the configuration
 Repository centosplus is listed more than once in the configuration
 Repository epel is listed more than once in the configuration
 Last metadata expiration check: 0:08:08 ago on Sun 19 Jul 2020 04:22:14 PM CST.
 No match for argument: bridge-utils
 Error: Unable to find a match: bridge-utils

但是无论怎么操作,都安装不了。

 

各种找资料还是无果,无奈只能试试能不能手动安装。

# bridge-utils-1.6 源码下载,然后上传到服务器
 https://mirrors.edge.kernel.org/pub/linux/utils/net/bridge-utils/bridge-utils-1.6.tar.xz
 
 # 源码解压
 tar -xvf bridge-utils-1.6.tar.xz
 
 # 安装autoconf工具
 yum install autoconf
 
 # 使用 autoconf 工具生成配置文件
 autoconf
 
 # 配置,生成makefile文件
 ./configure
 
 # 编译与安装
 make
 make install
 
 # bridge-utils 已经安装完毕。测试使用情况:
 [root@iZ2zef4zu0mvk0hhwa0il1Z bridge-utils-1.6]# brctl show
 bridge name     bridge id               STP enabled     interfaces
 docker0         8000.02422fc70dd0       no              veth5481848
                                                         veth7162f75

完美!