docker学习

一、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服务器上面
  1. 方式一:利用命令挂载
  # -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 /宿主机路径:/容器内路径  指定路径挂载
  1. 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.发布
  1. 基础知识
  • 每个指令都是大写字母
  • 执行顺序从上到下
  • #表示注释
  • 每一个指令都会创建一个新的镜像层,并提交
  1. dockerfile是面向开发的,以后发布项目,做镜像,需要编写dockerfile文件,逐渐成为企业交付的标准
  2. docker结构解释
  • dockerfile:构建文件,定义一切步骤,源代码
  • dockerImages:通过dockerfile构建生成的镜像,最终发布和运行的产品
  • docker容器:就是镜像运行生成的容器
  1. dockerfile指令:
FROM                                  #基础镜像,一切从这里开始构建
MAINTAINER                      #镜像是谁写的,姓名+邮箱
RUN                                    #镜像构建的时候需要运行的命令
ADD                                    #步骤,tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR                          #镜像的工作目录
VOLUME                            #挂载的目录
EXPOSE                            #暴露端口配置
CMD                                   #指定容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT                    #和CMD类似,可以追加命令
ONBUILD                           #当构建一个被继承 DockerFile 这个时候就会运行ONBUILD的指令,触发指令
COPY                                #类似ADD,将文件拷贝到镜像中
ENV                                   #构建的时候,设置环境变量
  1. 实战测试
    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 .
  • 测试
    在这里插入图片描述
  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
  1. 制作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
    在这里插入图片描述
  • 发布项目

十四、发布镜像到阿里云

  1. 找到阿里云镜像服务
  2. 新建命名空间
  3. 登录阿里云docker registry
  4. 将镜像推动到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

  1. 简介

官方文档: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.

  1. 命令
 # 在含有docker-compose.yml的目录使用
 docker-compose up  #运行
 docker-compose up -d  #后台启动
 docker-compose down  #停止
  1. 实战
  • 写一个服务,注意关于一些需要实例的现在都用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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值