目录
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/。
(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
完美!