- 1、SpringCloud项目打包成Docker镜像
首先我们要先创建一个文件夹,存储要打包的jar包。然后在当前目录下创建Dockerfile文件。如下图:
我的”/home/antcity/antcity-cloud/govern“目录中只有两个文件,一个是Dockerfile文件,另一个是要打包的jar文件。
然后执行打包命令。其中 docker build -t 指定要进行打包。test-govern为打包成的镜像名称。最后那个.(点)指定当前目录。
docker build -t test-govern .
执行后显示如下信息:
这时就可以查看是否打包成功了。命令为:
docker images
执行后显示如下信息:
在里面如果能找到我们打包的名称表示打包成功了。这样这一步我们就可以创建容器了。
- 2、根据镜像创建容器
创建窗口需要用到docker run命令。我们刚才创建的镜像名称为test-govern。我就根据这个镜像创建一个容器。代码如下:
docker run -p 8762:8761 -v /antcity-cloud/logs:/root/logs --name mytest-govern -d test-govern
在这个命令中 -p指定要映射的端口,8762为本地服务器的端口,8761为docker里面的端口,-v 指定将当前服务器中的目录映射到docker镜像中。/antcity-cloud/logs为本地服务器的目录,/root/logs为服务器的目录。--name 指定这个窗口的名称,test-govern为要根据哪个镜像创建容器。-d 参数用于指定 在后台运行,如果不加这个参数,启动信息将会时时显示在屏幕上。
创建成功后我们可以通过docker ps来查看已经启动的容器,可以通过docker ps -a查看所有容器。如下:
[root@localhost govern]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09259f68dc82 service-config "java -Djava.secur..." 22 minutes ago Up 22 minutes 0.0.0.0:9001->9000/tcp myservice-config
405b953cc741 service-govern "java -Djava.secur..." 9 hours ago Up 9 hours 0.0.0.0:8762->8761/tcp myservice-govern
61decc74a3ad redis "docker-entrypoint..." 21 hours ago Up 9 hours 0.0.0.0:6379->6379/tcp redis
8c64e6d3c508 mysql:5.6 "docker-entrypoint..." 22 hours ago Up 9 hours 0.0.0.0:3306->3306/tcp mymysql
00522dc4fb3a mongo "docker-entrypoint..." 23 hours ago Up 9 hours 0.0.0.0:27017->27017/tcp mongodb
cfea09c93e77 nginx "nginx -g 'daemon ..." 27 hours ago Up 8 hours 0.0.0.0:80->80/tcp mynginx
[root@localhost govern]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09259f68dc82 service-config "java -Djava.secur..." 23 minutes ago Up 23 minutes 0.0.0.0:9001->9000/tcp myservice-config
405b953cc741 service-govern "java -Djava.secur..." 9 hours ago Up 9 hours 0.0.0.0:8762->8761/tcp myservice-govern
60926795b335 nginx "nginx -g 'daemon ..." 9 hours ago Created gracious_albattani
7e8df654779f nginx "nginx -g 'daemon ..." 9 hours ago Created ecstatic_lamport
66dc10cd4ce8 nginx "nginx -g 'daemon ..." 9 hours ago Created elated_booth
56a3b6aa4db9 nginx "bash" 9 hours ago Created confident_panini
944e0da0b33d nginx "nginx -g 'daemon ..." 9 hours ago Exited (0) 9 hours ago optimistic_noyce
ead9e77f658d nginx "nginx -g 'daemon ..." 9 hours ago Exited (0) 9 hours ago frosty_euler
6a1770ef5a1b nginx "nginx -g 'daemon ..." 10 hours ago Created epic_saha
96ad4f9c501b nginx "nginx -g 'daemon ..." 10 hours ago Created youthful_davinci
0473942a72ba nginx "nginx -g 'daemon ..." 10 hours ago Exited (0) 10 hours ago practical_williams
2ac271bf0557 nginx "nginx -g 'daemon ..." 10 hours ago Exited (0) 10 hours ago optimistic_darwin
8d51489cc4af nginx "nginx -g 'daemon ..." 10 hours ago Exited (0) 10 hours ago wizardly_ritchie
61decc74a3ad redis "docker-entrypoint..." 21 hours ago Up 9 hours 0.0.0.0:6379->6379/tcp redis
ca8c2f8a4eda 2cdecf6eb9d6 "java -Djava.secur..." 22 hours ago Created sad_hypatia
3715592914fa 2cdecf6eb9d6 "java -Djava.secur..." 22 hours ago Created awesome_wiles
8c64e6d3c508 mysql:5.6 "docker-entrypoint..." 22 hours ago Up 9 hours 0.0.0.0:3306->3306/tcp mymysql
00522dc4fb3a mongo "docker-entrypoint..." 23 hours ago Up 9 hours 0.0.0.0:27017->27017/tcp mongodb
c561caefb7e0 d7d03cc52544 "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago wonderful_lichterman
dc0ce9077c6b d7d03cc52544 "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago cocky_kirch
9680f0b0199e 4b77da8c01ef "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago dreamy_albattani
fc9c73a8f67b 4b77da8c01ef "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago pensive_babbage
3b4d4a0f62a2 4b77da8c01ef "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago eager_pasteur
d6105685b629 4b77da8c01ef "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago sad_wiles
24af30efd2e3 4b77da8c01ef "java '-Djava.secu..." 23 hours ago Exited (130) 23 hours ago ecstatic_darwin
78f2f5d79380 02c0ba17e34c "java -Djava.secur..." 24 hours ago Exited (130) 23 hours ago brave_minsky
1666608b0d21 2cdecf6eb9d6 "java -Djava.secur..." 24 hours ago Exited (143) 23 hours ago gracious_leakey
330597037f03 2cdecf6eb9d6 "java -Djava.secur..." 24 hours ago Exited (130) 24 hours ago jovial_wiles
5f681715490f 02c0ba17e34c "java -Djava.secur..." 24 hours ago Exited (130) 24 hours ago elegant_noether
a3600203ff3d 02c0ba17e34c "java -Djava.secur..." 24 hours ago Exited (130) 24 hours ago vigilant_austin
0f1cad04b157 81d154770667 "java '-Djava.secu..." 24 hours ago Exited (130) 24 hours ago objective_pike
f24f0ad46be4 5a6bcb47b29e "java -Djava.secur..." 24 hours ago Exited (1) 24 hours ago focused_perlman
68106a252f1d c389bdd0f477 "java -Djava.secur..." 24 hours ago Exited (1) 24 hours ago elastic_bell
e7a292f6a064 dd8bffc793cb "java -Djava.secur..." 24 hours ago Exited (1) 24 hours ago service-config
da6cc984dd5c 2cdecf6eb9d6 "java -Djava.secur..." 25 hours ago Exited (143) 24 hours ago peaceful_lewin
cfea09c93e77 nginx "nginx -g 'daemon ..." 27 hours ago Up 8 hours 0.0.0.0:80->80/tcp mynginx
0ab40729e61d nginx "nginx -g 'daemon ..." 27 hours ago Exited (0) 27 hours ago pensive_leavitt
7d25ee27bba3 nginx "nginx -g 'daemon ..." 27 hours ago Exited (0) 27 hours ago mystifying_bell
c00356355536 nginx "nginx -g 'daemon ..." 27 hours ago Exited (0) 27 hours ago stupefied_brahmagupta
1acb5bf38912 nginx "nginx -g 'daemon ..." 27 hours ago Exited (0) 27 hours ago flamboyant_lamarr
c7faff7300af nginx "nginx -g 'daemon ..." 27 hours ago Exited (0) 27 hours ago dazzling_brahmagupta
[root@localhost govern]#
当容器创建成功后,我们下一次启动容器就不能用docker run,而应该是用docker start|restart 容器名称,如下:
docker start service-govern
docker restart service-govern
docker start 为命令,service-govern为容器名称,这个命令表示启动名称service-govern的容器,如果创建容器没有指定名称时可以用”CONTAINER ID“中指定的值来进行启动或关闭窗口
docker stop service-govern
docker stop 为停止一个容器。service-govern为容器名称或容器ID
- 3、Docker的其他操作
(进入容器内部)当我们启动一个容器后由于很多情况下需要进入容器内部查看某些信息,因此可以使用docker exec命令,代码如下:
[root@localhost govern]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
09259f68dc82 service-config "java -Djava.secur..." 31 minutes ago Up 31 minutes 0.0.0.0:9001->9000/tcp myservice-config
405b953cc741 service-govern "java -Djava.secur..." 9 hours ago Up 9 hours 0.0.0.0:8762->8761/tcp myservice-govern
61decc74a3ad redis "docker-entrypoint..." 22 hours ago Up 9 hours 0.0.0.0:6379->6379/tcp redis
8c64e6d3c508 mysql:5.6 "docker-entrypoint..." 23 hours ago Up 9 hours 0.0.0.0:3306->3306/tcp mymysql
00522dc4fb3a mongo "docker-entrypoint..." 23 hours ago Up 9 hours 0.0.0.0:27017->27017/tcp mongodb
cfea09c93e77 nginx "nginx -g 'daemon ..." 27 hours ago Up 8 hours 0.0.0.0:80->80/tcp mynginx
[root@localhost govern]# docker exec -it cfea09c93e77 bash
root@cfea09c93e77:/#
首先看看哪个-容器是启动的,docker exec命令只能进入已经启动的容器中,然后执行docker exec -it 容器ID bash 这样就进入容器内部了。
(删除容器)当我们有某个窗口不需要使用的时候可以通过docker rm 容器ID进行删除,代码如下:
[root@localhost govern]# docker rm f24f0ad46be4
f24f0ad46be4
[root@localhost govern]#
(删除镜像)当我们不需要使用某个镜像时,可以通过docker rmi 镜像ID进行删除,代码如下:
[root@localhost govern]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
service-config latest be9d7c01bd07 About an hour ago 729MB
<none> <none> 5d3617929ab1 9 hours ago 729MB
service-govern latest 53e9027a3d76 9 hours ago 739MB
test-govern latest 53e9027a3d76 9 hours ago 739MB
<none> <none> d7d03cc52544 23 hours ago 729MB
<none> <none> 4b77da8c01ef 24 hours ago 729MB
<none> <none> 02c0ba17e34c 25 hours ago 729MB
<none> <none> 81d154770667 25 hours ago 729MB
<none> <none> 5a6bcb47b29e 25 hours ago 729MB
<none> <none> c389bdd0f477 25 hours ago 729MB
<none> <none> dd8bffc793cb 25 hours ago 729MB
<none> <none> 2cdecf6eb9d6 26 hours ago 739MB
mongo latest b1c8142b3efc 4 days ago 410MB
nginx latest bb776ce48575 5 days ago 109MB
redis latest a55fbf438dfd 2 weeks ago 95MB
mysql 5.6 bc788a6a2745 2 weeks ago 256MB
java latest d23bdf5b1b1b 2 years ago 643MB
[root@localhost govern]# docker rmi test-govern
Untagged: test-govern:latest
注意:由于docker的每个容器类似于虚拟机的存在,因此docker会为每个启动的容器分配唯一的IP地址。比如我的服务器的IP地址信息如下:
[root@localhost govern]# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:50:56:ac:3f:41 brd ff:ff:ff:ff:ff:ff
inet 10.112.1.72/24 brd 10.112.1.255 scope global noprefixroute ens160
valid_lft forever preferred_lft forever
inet6 fe80::91f6:58f9:6a52:f1bc/64 scope link noprefixroute
valid_lft forever preferred_lft forever
3: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:63:d9:79:2f brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 scope global docker0
valid_lft forever preferred_lft forever
inet6 fe80::42:63ff:fed9:792f/64 scope link
valid_lft forever preferred_lft forever
173: vethfd3a98b@if172: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 4a:a3:c7:ff:c7:0e brd ff:ff:ff:ff:ff:ff link-netnsid 1
inet6 fe80::48a3:c7ff:feff:c70e/64 scope link
valid_lft forever preferred_lft forever
175: vethbb5eb3c@if174: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether da:06:6e:f3:cd:ed brd ff:ff:ff:ff:ff:ff link-netnsid 2
inet6 fe80::d806:6eff:fef3:cded/64 scope link
valid_lft forever preferred_lft forever
177: veth5ccb0d5@if176: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 1a:bc:cf:8f:3e:70 brd ff:ff:ff:ff:ff:ff link-netnsid 3
inet6 fe80::18bc:cfff:fe8f:3e70/64 scope link
valid_lft forever preferred_lft forever
185: veth49ec489@if184: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether ca:3b:c5:6a:ed:ac brd ff:ff:ff:ff:ff:ff link-netnsid 4
inet6 fe80::c83b:c5ff:fe6a:edac/64 scope link
valid_lft forever preferred_lft forever
193: vethe90f12f@if192: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether ce:2d:24:54:f2:f3 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet6 fe80::cc2d:24ff:fe54:f2f3/64 scope link
valid_lft forever preferred_lft forever
203: veth9d299d2@if202: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master docker0 state UP group default
link/ether 22:b9:ec:28:89:c9 brd ff:ff:ff:ff:ff:ff link-netnsid 5
inet6 fe80::20b9:ecff:fe28:89c9/64 scope link
valid_lft forever preferred_lft forever
因此如果我们的服务中有调用其他服务的信息,尽量设置为docker0网卡指定的IP,这个IP为Docker为主机分配的IP