一、docker背景介绍
- 之前的虚拟机技术
- 容器技术
- 传统虚拟机,虚拟出一条硬件,运行一个完整的操作系统,然后在这个系统上安装和运行软件
- 容器内的应用直接运行在宿主机的内容,容器是没有自己的内核的,也没有虚拟我们的硬件,所以就轻便了
- 每个容器间是互相隔离,每个容器内都有一个属于自己的文件系统,互不影响
二、docker组成
- 仓库、镜像、容器
从仓库中拉取镜像,运行镜像来创建容器,一个镜像可创建多个容器
三、安装docker
- 帮助文档
https://docs.docker.com/engine/install/
- 安装步骤
#1.卸载旧版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
#2.需要的安装包
yum install -y yum-utils
#3.设置镜像的仓库
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
#上述方法默认是从国外的,不推荐
#推荐使用国内的
yum-config-manager \
--add-repo \
https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#更新yum软件包索引
yum makecache fast
#4.安装docker相关的 docker-ce 社区版 而ee是企业版
yum install docker-ce docker-ce-cli containerd.io # 这里我们使用社区版即可
#5.启动docker
systemctl start docker
#6. 使用docker version查看是否按照成功
docker version
#7. 测试
docker run hello-world
- 卸载步骤
#1. 卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
#2. 删除资源
rm -rf /var/lib/docker
四、docker创建容器流程
五、docker常用命令
- 基本命令
docker logs -t --tail n 容器id #查看n行日志
docker version #显示docker的版本信息。
docker info #显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help #帮助命令
- 镜像命令
docker images #查看所有本地主机上的镜像
docker search [镜像名] #搜索镜像
docker pull [镜像名] #下载镜像
docker rmi [镜像名] #删除镜像
- 容器命令
docker run 镜像名 #新建容器并启动
docker run -d 镜像名 #后台启动命令
docker run -it centos:[版本号] /bin/bash #指定版本号运行
docker run -it centos /bin/bash #启动并进入容器
docker exec -it 容器id /bin/bash #后台启动后通过容器id进入容器
docker ps 列出所有运行的容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前正在运行的容器
docker kill 容器id #强制停止当前容器
docker inspect 容器id #查看容器信息
exit #容器直接退出
ctrl +P +Q #容器不停止退出 ---注意:这个很有用的操作
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
docker rm -f $(docker ps -aq) #删除所有的容器
docker cp b2552adaeb74:/home/test.java /usr/local #将dockers的文件拷贝到本机usr/local下面
- dockers命令可爱图
六、安装nginx示例
- 搜索nginx镜像
docker search nginx
- 拉取nginx镜像
docker pull nginx
- 查看是否拉取成功
docker images
- 运行nginx镜像创建容器
注意这里的端口映射需要在linux防火墙中开放对应的端口
# -d 后台启动
# --name 重命名
# 3344:80 端口映射,本机3344端口映射到docker容器的80端口
docker run -d -p 3344:80 --name nginx01 nginx
- 进入后台启动的nginx
docker exec -it nginxTest /bin/bash #进入
- 端口映射图解
七、安装tomcat示例
- 运行镜像创建容器
docker run -d -p 3355:8080 --name tomcat01 tomcat
- 进入容器查看
docker exec -it tomcat /bin/bash
- 发现webapps下面没有任何文件
- 此时打开tomcat页面,发现404,原因就是webapps下面没有对应文件
- webapps.list存在webapps对应的文件,把所有文件复制过来即可
- 此时打开网页可以查看到tomcat启动
八、安装elasticsearch
- es非常消耗内存,启动需要增加内存的限制
- 查看docker资源
docker stats
- 限制内存运行docker
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" --name es elasticsearch:7.6.2
- docker容器内部互相隔离,kibana连接es需要通过linux内网ip
九、portainer可视化面板
- 安装
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer
- 打开界面
- 选择local连接,进入可查看
十、镜像讲解
- 用来打包软件运行环境和基于运行环境开发的软件,包含运行某个项目所需的所有内容,包括代码,运行时库,环境变量和配置文件
- 打包镜像
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[TAG]
十一、容器数据卷
容器之间数据共享,数据可以持久化到本地。就是目录的挂载,将容器的目录挂载到linux服务器上面
- 方式一:利用命令挂载
# -v 挂载 linux服务器目录:/usr/test/dockertest => centos目录:home
# 并且dockertest目录不存在,挂载的时候自动创建的
docker run -it -v /usr/test/dockertest:/home centos /bin/bash
# 现在linux虚拟机目录和docker容器目录一一对应,不论在那个目录下进行修改,都会同步操作
# 即便容器关闭之后,改变linux目录,dockers容器重启之后照样会同步(相同的docker容器id)
# 查看容器状态,可以看到容器挂载信息
docker inspect 容器id
查看挂载信息
启动mysql并挂载,注意是后台启动
# 需要连接密码,设置为123456 -e为环境配置
docker run -d -p 3307:3306 --name mysql-3307 -e MYSQL_ROOT_PASSWORD=password-3307 -v /data/docker/volume/mysql3307/data:/var/lib/mysql -v /data/docker/volume/mysql3307/log:/var/log/mysql -v /data/docker/volume/mysql3307/conf:/etc/my.conf mysql:latest
# 此时可以使用linux的9002端口连接上docker容器里面的mysql,并且修改挂载的文件目录是双向的
# 将容器rm删除并不会删除挂载目录的持久化
- 匿名挂载和具名挂载
# 查看所有数据卷 docker volume ls
[root@iZwz9bbmlfbm8e53rmdyldZ data]# docker volume ls
DRIVER VOLUME NAME
local 6bed29f75b9e01f5bb0c863d4eee619aa8cc9094e784a3e432ad372d51bf45f8
local 418ccd4bf694edc60e8311a18faf43b57b6f32ec2a7ebeccd63eba196ca0328a
local 876d80eb1f2f2964fcac3b7f3ab9cd1cf877f74298a14b4c4f541c86e40eb6f1
local bdced74445397950156218d690b9ea09359f74d6928b619d486f65b6ff8c37e2
local e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb
# 以上都是匿名的挂载,可以使用docker volume inspect [卷名] 查看数据卷的信息
[root@iZwz9bbmlfbm8e53rmdyldZ data]# docker volume inspect e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb
[
{
"CreatedAt": "2022-03-23T11:41:50+08:00",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb/_data",
"Name": "e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb",
"Options": null,
"Scope": "local"
}
]
# 可以看到以上数据卷的数据存在/var/lib/docker/volumes/XXX 下面
# 只要没有指定挂载目录,都是放在/var/lib/docker/volumes/XXX 下面的
# 可以使用下面的具名挂载 docker run -d -v juming-nginx:/etc/nginx nginx
[root@iZwz9bbmlfbm8e53rmdyldZ mysql]# docker volume ls
DRIVER VOLUME NAME
local 6bed29f75b9e01f5bb0c863d4eee619aa8cc9094e784a3e432ad372d51bf45f8
local 418ccd4bf694edc60e8311a18faf43b57b6f32ec2a7ebeccd63eba196ca0328a
local 876d80eb1f2f2964fcac3b7f3ab9cd1cf877f74298a14b4c4f541c86e40eb6f1
local bdced74445397950156218d690b9ea09359f74d6928b619d486f65b6ff8c37e2
local e16b1d001cbb62a81105f993a0c4dab610c88320d1b08fde4f1511e6420d6fdb
local juming-nginx
- 区分是匿名、具名还是指定路径挂载
-v 容器内路径 匿名挂载
-v 卷名:容器内路径 具名挂载
-v /宿主机路径:/容器内路径 指定路径挂载
- dockerfile命令脚本挂载
dockerfile是用来构建dockers镜像的文件,命令脚本
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层
# 下面来一个demo
# 首先创建一个文件,建议名称为dockerfile
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# touch dockerfile.txt
# 进入dockerfile文件,输入命令,此方法是匿名挂载,生成镜像的时候自动挂载volume1和volume2数据卷,和外部有一个目录进行同步
FROM centos
VOLUME ["volume1","volume2"]
CMD echo "-----end------"
CMD /bin/bash
# 创建镜像,挂载目录
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# docker build -f dockerfile -t xbj/centos .
# 查看刚才的镜像
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xbj/centos latest a53f6e729d0e About a minute ago 231MB
<none> <none> 033c421e4ae2 53 minutes ago 231MB
tomcattest 1.0 f500c9825421 3 days ago 684MB
# 查看容器id
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1ef7ace106ee 033c421e4ae2 "/bin/bash" 24 minutes ago Up 24 minutes
# 查看容器信息,可以看到挂载信息
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# docker inspect 1ef7ace106ee
"Mounts": [
{
"Type": "volume",
"Name": "769d8c2a9b8a47b3c9454b851ad44122fc78459d5d15b086bfd7ac2df6d0b4e8",
"Source": "/var/lib/docker/volumes/769d8c2a9b8a47b3c9454b851ad44122fc78459d5d15b086bfd7ac2df6d0b4e8/_data",
"Destination": "volume01",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
},
{
"Type": "volume",
"Name": "38413e11b2aedfec9a3653d31bec640a99043e67b60e5ed28d947daa157e9b1c",
"Source": "/var/lib/docker/volumes/38413e11b2aedfec9a3653d31bec640a99043e67b60e5ed28d947daa157e9b1c/_data",
"Destination": "volume02",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
十二、数据卷容器(容器之间共享数据)
# 首先创建docker01容器
[root@iZwz9bbmlfbm8e53rmdyldZ _data]# docker run -it --name docker01 xbj/centos
# 再创建docker02容器,继承docker01.此时docker01就叫数据卷容器。docker01和docker02数据共享
docker run -it --name docker02 --volumes-from docker01 xbj/centos
十三、Dockerfile
步骤:1.编写dockerfile文件 2.构建镜像 3.发布
- 基础知识
- 每个指令都是大写字母
- 执行顺序从上到下
- #表示注释
- 每一个指令都会创建一个新的镜像层,并提交
- dockerfile是面向开发的,以后发布项目,做镜像,需要编写dockerfile文件,逐渐成为企业交付的标准
- docker结构解释
- dockerfile:构建文件,定义一切步骤,源代码
- dockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品
- docker容器:就是镜像运行生成的容器
- dockerfile指令:
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #和CMD类似,可以追加命令
ONBUILD #当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令
COPY #类似ADD,将文件拷贝到镜像中
ENV #构建的时候,设置环境变量
- 实战测试
Docker Hub中大部分都是从这个基础镜像过来的FROM scratch,然后通过配置需要的软件和配置来进行的构建
创建自己的centos
# 1.编写文件
FROM centos
MAINTAINER xbj<dcmxbj@163.com>
ENV MYPATH /usr/local
WORKDIR $MYPATH
EXPOSE 9001
CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash
# 2. 构建镜像
# docker build -f dockerfile文件路径 -t 镜像名:[tag] .
docker build -f mycentos -t mycentos:v0.1 .
- 测试
- CMD和ENTRYPOINT区别
- 使用CMD,不能追加
# 1.编写dockerfile
FROM centos
CMD ["ls","-a"]
# 2.构建镜像
# 3.运行镜像,会发现容器运行之后,会输出文件列表
[root@iZwz9bbmlfbm8e53rmdyldZ dockerfile]# docker run cmdtest:0.1
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
# 4.如果在命令后面加参数无效。此时-l替换了CMD的["ls","-a"],并且-l不是命令,所以启动失败
[root@iZwz9bbmlfbm8e53rmdyldZ dockerfile]# docker run cmdtest:0.1 -l
docker: Error response from daemon: OCI runtime create failed: container_linux.go:380: starting container process caused: exec: "-l": executable file not found in $PATH: unknown.
ERRO[0000] error waiting for container: context canceled
# 5.完整命令替换CMD操作
[root@iZwz9bbmlfbm8e53rmdyldZ dockerfile]# docker run cmdtest:0.1 ls -al
total 56
drwxr-xr-x 1 root root 4096 May 15 13:04 .
drwxr-xr-x 1 root root 4096 May 15 13:04 ..
-rwxr-xr-x 1 root root 0 May 15 13:04 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 May 15 13:04 dev
drwxr-xr-x 1 root root 4096 May 15 13:04 etc
drwxr-xr-x 2 root root 4096 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 4096 Sep 15 2021 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 2020 media
drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt
drwxr-xr-x 2 root root 4096 Nov 3 2020 opt
dr-xr-xr-x 198 root root 0 May 15 13:04 proc
dr-xr-x--- 2 root root 4096 Sep 15 2021 root
drwxr-xr-x 11 root root 4096 Sep 15 2021 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 May 15 13:04 sys
drwxrwxrwt 7 root root 4096 Sep 15 2021 tmp
drwxr-xr-x 12 root root 4096 Sep 15 2021 usr
drwxr-xr-x 20 root root 4096 Sep 15 2021 var
- 使用ENTRYPOINT,重复以上步骤,测试可以追加
[root@iZwz9bbmlfbm8e53rmdyldZ dockerfile]# docker run enttest
.
..
.dockerenv
bin
dev
etc
home
lib
lib64
lost+found
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
[root@iZwz9bbmlfbm8e53rmdyldZ dockerfile]# docker run enttest -l
total 56
drwxr-xr-x 1 root root 4096 May 15 13:08 .
drwxr-xr-x 1 root root 4096 May 15 13:08 ..
-rwxr-xr-x 1 root root 0 May 15 13:08 .dockerenv
lrwxrwxrwx 1 root root 7 Nov 3 2020 bin -> usr/bin
drwxr-xr-x 5 root root 340 May 15 13:08 dev
drwxr-xr-x 1 root root 4096 May 15 13:08 etc
drwxr-xr-x 2 root root 4096 Nov 3 2020 home
lrwxrwxrwx 1 root root 7 Nov 3 2020 lib -> usr/lib
lrwxrwxrwx 1 root root 9 Nov 3 2020 lib64 -> usr/lib64
drwx------ 2 root root 4096 Sep 15 2021 lost+found
drwxr-xr-x 2 root root 4096 Nov 3 2020 media
drwxr-xr-x 2 root root 4096 Nov 3 2020 mnt
drwxr-xr-x 2 root root 4096 Nov 3 2020 opt
dr-xr-xr-x 199 root root 0 May 15 13:08 proc
dr-xr-x--- 2 root root 4096 Sep 15 2021 root
drwxr-xr-x 11 root root 4096 Sep 15 2021 run
lrwxrwxrwx 1 root root 8 Nov 3 2020 sbin -> usr/sbin
drwxr-xr-x 2 root root 4096 Nov 3 2020 srv
dr-xr-xr-x 13 root root 0 May 15 13:08 sys
drwxrwxrwt 7 root root 4096 Sep 15 2021 tmp
drwxr-xr-x 12 root root 4096 Sep 15 2021 usr
drwxr-xr-x 20 root root 4096 Sep 15 2021 var
- 制作tomcat镜像
1.准备镜像文件tomcat压缩包,jdk的压缩包
2.编写dockerfile文件,官方命名Dockerfile,build会自动寻找这个文件,就不需要-f指定文件目录
- 编写Dockerfile,构建镜像,运行镜像
#1.编写Dockerfile
#基础文件
FROM centos
#作者
MAINTAINER xbj<dcmxbj@163.com>
#将Dockerfile同级目录拷贝进tomcat镜像下面的/usr/local文件夹内
COPY readme.txt /usr/local/readme.txt
#解压jdk到tomcat镜像的/usr/local文件夹下
ADD jdk-8u261-linux-x64.tar.gz /usr/local/
#解压tomcat到tomcat镜像的/usr/local文件夹下
ADD apache-tomcat-9.0.52.tar.gz /usr/local/
#指定运行目录
ENV MYPATH /usr/local
WORKDIR $MYPATH
#配置环境变量
ENV JAVA_HOME /usr/local/jdk1.8.0_261
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.52
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.52
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
EXPOSE 8080
CMD /usr/local/apache-tomcat-9.0.52/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.52/bin/logs/catalina.out
#2.构建镜像
[root@iZwz9bbmlfbm8e53rmdyldZ dockertest]# docker build -t diytomcat:1.0 .
#3.运行镜像
[root@iZwz9bbmlfbm8e53rmdyldZ test]# docker run -d -p 9001:8080 -v /usr/test/dockervolume/tomcatvolume/test:/usr/local/apache-tomcat-9.0.52/webapps/test -v /usr/test/dockerlogs/tomcatlogs:/usr/local/apache-tomcat-9.0.52/logs --name diytomcat diytomcat:1.0
- 测试tomcat
- 发布项目
十四、发布镜像到阿里云
- 找到阿里云镜像服务
- 新建命名空间
- 登录阿里云docker registry
- 将镜像推动到registry
十五、Docker网络
- 本机可以ping通容器内的网络
每次启动一个容器,就会为其分配一个ip,并且与主机能够互相通信
#1.启动容器
#2.查看容器ip
[root@7177af42561e /]# 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
84: eth0@if85: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:05 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.5/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
#3.ping容器内ip
[root@iZwz9bbmlfbm8e53rmdyldZ /]# ping 172.17.0.5
PING 172.17.0.5 (172.17.0.5) 56(84) bytes of data.
64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.229 ms
64 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.066 ms
64 bytes from 172.17.0.5: icmp_seq=3 ttl=64 time=0.082 ms
- 容器间能够互相通信
# 在172.17.0.4中ping 172.17.0.5
root@51f2655c302b local]# 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
76: eth0@if77: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:ac:11:00:04 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 172.17.0.4/16 brd 172.17.255.255 scope global eth0
valid_lft forever preferred_lft forever
[root@51f2655c302b local]# ping 172.17.0.5
PING 172.17.0.5 (172.17.0.5) 56(84) bytes of data.
64 bytes from 172.17.0.5: icmp_seq=1 ttl=64 time=0.287 ms
64 bytes from 172.17.0.5: icmp_seq=2 ttl=64 time=0.178 ms
64 bytes from 172.17.0.5: icmp_seq=3 ttl=64 time=0.123 ms
64 bytes from 172.17.0.5: icmp_seq=4 ttl=64 time=0.135 ms
十六、打包springboot服务,并运行容器
# 1.编写Dockerfile
FROM java:8
COPY *.jar /idle-manager.jar
EXPOSE 8081
ENTRYPOINT ["nohup","java","-jar","idle-manager.jar","&"]
#2.构建镜像
docker build -t idle-manager:v1.0 .
# 3.运行容器
docker run -d -p 8081:8081 --name manager idle-manager:v1.0
十七、启动redis
docker run -d -p 3769:6379 -v /usr/dir/test-redis/conf:/etc/redis/redis.conf -v /usr/dir/test-redis/data:/data --name test-redis redis:latest redis-server /etc/redis/redis.conf
十八、docker-compose
- 简介
官方文档:https://docs.docker.com/compose/
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version
Using Compose is basically a three-step process:
-
Define your app’s environment with a Dockerfile so it can be reproduced anywhere.
-
Define the services that make up your app in docker-compose.yml so they can be run together in an isolated environment.
-
Run docker compose up and the Docker compose command starts and runs your entire app. You can alternatively run docker-compose up using the docker-compose binary.
- 命令
# 在含有docker-compose.yml的目录使用
docker-compose up #运行
docker-compose up -d #后台启动
docker-compose down #停止
- 实战
- 写一个服务,注意关于一些需要实例的现在都用docker服务替代
application.yml
server:
port: 8080
spring:
redis:
host: redis
- 写Dockerfile
FROM java:8
COPY *.jar /app.jar
CMD ["--server.port=8080"]
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app.jar"]
- 写docker-compose.yml
version: '3.0'
services:
webapp:
build: .
image: webapp
depends_on:
- redis
ports:
- "8080:8080"
redis:
image: "library/redis:alpine"
- 将jar包、Dockerfile、docker-compose.yml上传到服务器
- docker-compose up启动,就可以了
十九、docker启动dubbo-admin
docker run -d \
-p 9001:8080 \
-e admin.root.user.name=admin \
-e admin.root.user.password=admin \
-e admin.registry.address='zookeeper://120.79.157.16:2181' \
-e admin.config-center='zookeeper://120.79.157.16:2181' \
-e admin.metadata-report.address='zookeeper://120.79.157.16:2181' \
--name dubbo-admin apache/dubbo-admin