Docker

Docker

一.Docker的安装

查看环境

  • 系统内核是3.10以上的
uname -r

1.下载Docker依赖的环境

yum install -y yum-utils device-mapper-persistent-data lvm2

2.指定Docker的镜像源

#使用的国内阿里云镜像源速度快
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

3.安装Docker

更新一下yum索引:
yum makacache fast
下载docker
yum -y install docker-ce

4.启动Docker并测试

# 启动docker服务
systemctl start docker

#重启docker服务   
systemctl restart  docker

# 设置开启自动启动
systemctl enable docker

#测试
docker run hello-world

二.Docker的中央仓库【重点】

1.修改配置文件

编辑配置文件,没有就创建一个

vim /etc/docker/daemon.json

文件内容如下

Docker官方的
{
  "registry-mirrors": [
        "https://hub.docker.com"
    ]
}

上面的都是国外的速度慢,使用阿里云每个人自己的镜像加速器

{
  "registry-mirrors": ["https://ryk5t398.mirror.aliyuncs.com"]
}

其他的国内加速地址:

1.网易
http://hub-mirror.c.163.com
2.Docker中国区官方镜像
https://registry.docker-cn.com
3.中国科技大学
https://docker.mirrors.ustc.edu.cn
4.阿里云容器  服务
https://cr.console.aliyun.com/
首页点击“创建我的容器镜像”  得到一个专属的镜像加速地址,类似于“https://1234abcd.mirror.aliyuncs.com”
5.daoCloud
http://hub.daocloud.io/ (不用注册,推荐使用)

2.重启docker

重新加载配置文件
systemctl daemon-reload

systemctl restart docker -- 重启docker服务

systemctl status docker -- 确认docker服务正常运行

查看结果

docker info

三.Docker镜像的操作【重点】

1.拉取镜像

docker pull 镜像名称[:tag]

docker pull tomcat:8.5.15

2.查看本地全部镜像

docker images
或者
docker image ls

#	搜素镜像
docker search 镜像名

3.删除本地镜像

docker rmi 镜像的ID,名字

4.镜像的导入导出

#将本地镜像导出
docker save -o 导出的路径 镜像id

# 将在本地的镜像文件
docker load -i 镜像文件

# 修改镜像名称
docker tag 镜像id 新镜像名称:版本

四.Docker的容器操作【重点】

1.运行容器

docker run [可选参数] image[:tag]

# 参数说明
--name="Name"	容器名字 tomcat01 tomcat02,用来区分容器
-d 						后台方式运行
-i						使用交互方式运行,进入容器查看内容
-t						为容器的标准输入虚拟一个tty
-p						指定容器的端口 -p 8080:8080
			-p ip:主机端口:容器端口
			-p 主机端口:容器端口(常用)
			-p 容器端口
-rm    					在stop容器后会删除容器
			
docker run -d --name tomcat-8080 -p 8080:8080 tomcat:8
# 从容器中退回主机
[root@69f6b8df1e65 /]#  exit

2.查看正在运行的容器

# docker ps 命令

-a   # 列出当前正在运行的容器 + 历史运行过的容器
-n=? # 显示最近创建的容器 ?是数字
-q   # 只显示容器的编号

[root@iZwz954642t91dbe6lc2l1Z ~]# docker ps -qa

3.查看容器日志

docker logs -f 容器id

4.进入容器内容部

docker exec -it 容器id/名 bash

-i						使用交互方式运行,进入容器查看内容
-t						为容器的标准输入虚拟一个tty

5.复制内容在外部和容器之间

docker cp 文件名称  容器id:容器内部路径

# 外部复制到容器中
[root@localhost ~]# docker cp  1.jpg tomcat-8080:/usr/local/tomcat/webapps/ROOT

# 容器中复制到外部  复制到root目录
[root@localhost ~]# docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/index.html /root

通过此方法可以修改自定义的tomcat首页

6.重启&启动&停止&删除容器

#重新启动容器
docker restart 容器id/容器名

#启动停止运行的容器
docker start 容器id/容器名

#停止指定的容器(删除容器前,需要先停止容器)
docker stop 容器id/容器名

#停止全部容器
docker stop $(docker ps -qa)

#删除指定容器
docker rm 容器id/容器名

#删除全部容器
docker rm $(docker ps -qa)

7.Docker中Tomcat的访问

为了减少开支docker删除了大部分的命令包 例如vi等

tomcat中的webapps中的资源也没有了等*

没有配置index

开放端口

firewall-cmd --zone=public --add-port=8080/tcp --permanent 

firewall-cmd --reload

firewall-cmd --list-ports

运行容器

docker run -d -name tomcat-8080 -p 8080:8080 tomcat

进入容器

docker exec -it 容器名/id bash

进入webapps中创建ROOT目录

# 没有了vi等指令

echo 'zxy-studyDocker-8080'>>index.html

在访问192.168.231.139:8080就会出现首页

配置了index修改自定义的tomcat首页

# 先复制出去修改后 在复制回去
[root@localhost ~]# docker cp tomcat-8080:/usr/local/tomcat/webapps/ROOT/index.html /root

# 添加照片
[root@localhost ~]# docker cp  1.jpg tomcat-8080:/usr/local/tomcat/webapps/ROOT
通过192.168.231.139:8080/1.jpg可以访问

五.数据卷【重点】

卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。

数据卷的特点:

  1. 数据卷可在容器之间共享或重用数据
  2. 卷中的更改可以直接生效
  3. 数据卷中的更改不会包含在镜像的更新中
  4. 数据卷的生命周期一直持续到没有容器使用它为止

应用数据卷方法一:

1.创建数据卷

docker volume create 数据卷名称

2.查看数据卷详情

docker volume inspect 数据卷名称

3.查看全部数据卷

docker volume ls

4.删除数据卷

docker volume rm 数据卷名称

5.容器映射数据卷

# 通过数据卷名称映射
docker run -v 数据卷名称:容器内部的路径 镜像id

应用数据卷方法二:[此方法更快捷]

# 通过路径映射数据卷
docker run -v 路径:容器内部的路径 镜像id

-v 路径 :后面的是容器路径

使用此方法docker volume ls是查不到对应的数据卷的
因为只通过路径使用 并没有创建一个数据卷出来

[root@localhost docker-volume]# docker run -d --name tomcat-8081 -p 8081:8080 -v /root/docker-volume:/usr/local/tomcat/webapps/exam tomcat

将/root/docker-volume和/usr/local/tomcat/webapps/exam建立数据卷(两路径之间建立)
前目录修改 后面目录下会

六.Docker应用安装

Docker安装tomcat

参考上面演示实例

Docker安装nginx

安装nginx镜像

docker pull nginx

启动并建立数据卷

[root@localhost conf]# docker run -d -p 80:80 --name nginx-80 -v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v  /usr/local/nginx/conf/conf.d/default.conf:/etc/nginx/conf.d/default.conf nginx

配置集群nginx.conf

upstream nginxCluster{
        server 192.168.231.139:8080;
        server 192.168.231.139:8081;
        server 192.168.231.139:8082;
    }

修改conf.d/default.conf

# 注意/目录只能有一个
 location /{
        proxy_pass http://nginxCluster;
    }

Docker安装MySQL

搜索mysql镜像

docker search mysql

下载镜像

docker pull mysql:5.6

创建并启动mysql容器(需要设置密码)

docker run -d --name mysql5.6-3306 -p 3306:3306 -e MYSQL_ROOT_PASSWORD='123456' mysql:5.6

访问测试

docker exec -it mysql:5.6-3306 bash

连接数据库

mysql -u root -p

密码是上面自己设置的

设置其他机器登录

授权主机访问

mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

刷新权限

mysql> flush privileges;

退出 exit;

开放防火墙对应端口

firewall-cmd --zone=public --add-port=3306/tcp --permanent

firewall-cmd --reload

七.Dockerfile自定义镜像【重点】

1.Dockerfile常用语言

FROM

指定基础镜像(一般文件第一个指令)

基础镜像不存在 会在docker hub上拉

FROM 镜像:tag

MAINTAINER

提供dockerfile制作者本人消息

逐渐废弃
LABEL 替代
LABEL maintainer="作者信息"

RUN

在镜像中执行命令

RUN apt-get updata && apt-get install -y package\

后面加\会继续执行下一行的执行

ENV

设置环境变量

ENV <key> <value>

写发一
ENV JAVA_HOME /usr/lib/jvm/java-7-openjdk-amd64
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV PATH $PATH:$JAVA_HOME/bin:$JRE_HOME/bin
 
写发二
ENV JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64 \
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar \
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

EXPOSE

设置暴露端口号。注意是容器的端口号,不是物理机的端口号

EXPOSE port
EXPOSE 80

WORKDIR

镜像中切换工作目录 类似于cd

WORKDIR /path/to/workdir

WORKDIR /usr/local/nginx

CMD

指定容器启动后要执行的命令(可以写多个,只以最后一个为准)

CMD ["nginx"]

CMD ["python", "app.py"]

ADD

复制命令,把本机的文件复制到镜像中,如果dest是目录则会帮你自动创建出这个目录,如果src是压缩文件会帮你自动压缩出来,当然ADD指令中的src也可以是URL的链接,还有另外一条指令 COPY ,注意区别!!!

另外, src部分是是你Dockerfile的相对路径,这个请注意!!!

ADD <src> <dest>

ADD nginx.conf /etc/nginx/nginx.conf
ADD app.tar.gz /app/app

COPY

与ADD指令类似但是COPY的src部分只能是本地文件,文件路径是Dockerfile的相对路径。如果COPY的是压缩包不会帮你解压。

COPY <src> <dest>

COPY app.tar.gz /app

VLOUME

创建一个具有指定名称的挂载数据卷

 VOLUME ["/var/log/"]
 VOLUME /var/log

2.自定义镜像

案例1

需求:创建一个镜像(基于tomcat)里面有一个index.html。并写入Hello zxy Docker

1.在宿主机创建一个空白目录

mkdir -p /usr/local/docker/demo1

2.在该目录下,创建一个Dockerfile

vim Dockerfile

3.编写dockerfile内容

FROM tomcat
RUN mkdir -p /usr/local/tomcat/webapps/ROOT/
RUN echo 'Hello zxy Docker'>>/usr/local/tomcat/webapps/ROOT/index.html
WORKDIR /usr/local/tomcat/webapps

4.构建镜像

docker build -t demo1 .
后面的. 代表当前目录下的demo1
也可以使用绝对路径

5.运行镜像所在容器

 docker run -d --name demo1-8091 -p 8091:8080 demo1
 
 记得开启端口(还是不行 防火墙问题试试)
 
 访问192.168.231.139:8091

案例2

基于上一个镜像(基于tomcat)外部复制一个文件(图片),并复制到容器中并能访问

1.在宿主机创建一个空白目录

mkdir -p /usr/local/docker/demo3

2.在该目录下,创建一个Dockerfile

vim Dockerfile

3.编写dockerfile内容

FROM tomcat
WORKDIR /usr/local/tomcat/webapps/
RUN mkdir ROOT
COPY 1.jpg /usr/local/tomcat/webapps/ROOT/

4.构建镜像

docker build -t demo3 .

5.运行镜像所在容器

docker run -d --name demo3-8080 -p 8080:8080 demo3

如果对已有镜像镜像修改

FROM tomcat
RUN mkdir -p /usr/local/tomcat/webapps/ROOT/
RUN echo 'Hello zxy Docker'>>/usr/local/tomcat/webapps/ROOT/index.html
RUN echo 'Hello zxy demo1:1.0 Docker'>>/usr/local/tomcat/webapps/ROOT/a.html
WORKDIR /usr/local/tomcat/webapps

重新构建镜像

docker build -t demo1:1.0 .

可以加上tag
没有tag就是lasted
如果有存在一样的会出现虚悬镜像

就会出现第二个版本的demo1  也可以运行demo:1.0

3.虚悬镜像

在使用docker pull 或者docker build时 创建的镜像明已经存在了的话,已存在的镜像变成none (虚悬镜像)。

此时改镜像失去了意义可以随意删除

docker image prune

删除前也需要删除对应的容器

出现的错误

docker: Error response from daemon: driver failed programming external connectivity on endpoint dome3-8080 (d0166d038c542f1cbf1edee94aa90f3337515511b7928225be462adadd516bfb):  (iptables failed: iptables --wait -t nat -A DOCKER -p tcp -d 0/0 --dport 8080 -j DNAT --to-destination 172.17.0.2:8080 ! -i docker0: iptables: No chain/target/match by that name.  (exit status 1)).

#重启docker命令
systemctl restart docker

关闭对应端口 或防火墙

八.Docker部署springboot项目

linux部署spriungboot不方便
将springboot自定义为镜像
需要多少run多少个容器即可

1.创建一个springboot项目 打包成jar包

Docker-deploy-0.0.1-SNAPSHOT.jar

2.创建目录

mkdir  /usr/local/docker/docker-deploy

将jar放入

3.创建Dockerfile

vim Dockerfile

4.编写Dockerfile

FROM java:8
VOLUME /tmp
ADD Docker-deploy-0.0.1-SNAPSHOT.jar docker-deploy.jar
EXPOSE 8080
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/docker-deploy.jar"]
FROM 表示基础镜像
VOLUME /tmp springboot内嵌的tomcat默认使用/tmp作为工作目录

5.构建容器

docker build -t docker-deploy .

6.运行容器

docker run -d --name docker-deploy-8080 -p 8080:8080 --rm docker-deploy

九.Idea集成Docker

1.Docker开启远程访问

#修改Docker服务文件
vi /lib/systemd/system/docker.service
#修改ExecStart这行(把原来的注释掉)
ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2379 -H unix:///var/run/docker.sock

systemctl daemon-reload

systemctl restart docker.service

netstat -nlpt

2.IDEA安装Docker插件

docker插件

3.Linux开发物理2379端口

firewall-cmd --zone=public --add-port=2379/tcp --permanent

firewall-cmd --reload

4.IDEA连接远程Docker

idea远程Docker配置

https://ryk5t398.mirror.aliyuncs.com

十.Idea中的docker操作

1.快速创建一个容器并启动

容器创建1

容器创建2

容器创建3

也可以

容器创建4

十一.IDEA中Docker持续集成插件----自动化部署

1.在pox.xml添加插件

<plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <!--镜像名称  要为小写-->
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <!--指定标签-->
                    <imageTags>
                        <image>${project.version}</image>
                    </imageTags>
                    <!--基础镜像jdk1.8-->
                    <baseImage>java</baseImage>
                    <!--制作者信息-->
                    <maintainer>zxy@email.com</maintainer>
                    <!--切换到ROOT目录-->
                    <workdir>/ROOT</workdir>
                    <cmd>["java", "-version"]</cmd>
                    <entryPoint>["java", "-jar", "${project.build.finalName}.jar"]</entryPoint>
                    <!--指定 远程docker api地址-->
                    <dockerHost>http://192.168.231.139:2379</dockerHost>

                    <!-- 这里是复制 jar 包到 docker 容器指定目录配置 -->
                    <resources>
                        <resource>
                            <targetPath>/ROOT</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                </configuration>
            </plugin>

镜像名注意(只能为小写)

<modelVersion>4.0.0</modelVersion>
    <groupId>com.zxy</groupId>
    # 镜像名 只能为小写 所有artifactId为小写(镜像名后缀)
    <artifactId>docker-deploy</artifactId>
    #  自定义小版本
    <version>0.0.2</version>
    <name>docker-deploy</name>
    <description>docker-deploy</description>
    <properties>
    #  自定义镜像名前缀
        <docker.image.prefix>zxy-learn</docker.image.prefix>
    </properties>

2.执行命令(控制台)

mvn clean package docker:build

也可以在idea集成maven中点击clean 和 package
然后 输入指令docker build

3.创建对应镜像并启动

参考idea中docker操作

4.扩展配置(绑定docker命令到Maven各个阶段)

<configuration>
</configuration>
#  这里只绑定了build -->package
#   只需要在maven中先clean后点击package会自动打包后创建镜像
#   不需要再去docker build
<executions>
    <execution>
      <id>build-image</id>
      <phase>package</phase>
      <goals>
        <goal>build</goal>
      </goals>
    </execution>
</executions>


还可以绑定tag,push等操作

自动build

十二.idea整合Docker加密认证

后面命令都在ca目录下执行

Docker认证命令配置

1.创建ca文件夹

mkdir -p /usr/local/ca
cd /usr/local/ca/

2.创建 CA 私钥和公钥

openssl genrsa -aes256 -out ca-key.pem 4096

输出

...................++
..........................................................................................................................................................................................................................................................................................................................................................++
e is 65537 (0x10001)
Enter pass phrase for ca-key.pem:  # 此处输入密码

Verifying - Enter pass phrase for ca-key.pem: # 此处输入密码

kzxy
kzxy

3.依次输入密码、国家、省、市、组织名称等

openssl req -new -x509 -days 365 -key ca-key.pem -sha256 -out ca.pem

kzxy  cn  cs nx  1603933673@qq.com hhxy

输出

Enter pass phrase for ca-key.pem:
Enter pass phrase for ca-key.pem:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Nme (full name) []:zj
Locality Name (eg, city) [Default City]:hz
Organization Name (eg, company) [Default Company Ltd]:qdsg
Organizational Unit Name (eg, section) []:qdsg
Common Name (eg, your name or your server's hostname) []:qdsg
Email Address []:1@qq.com

4.生成 server-key.pem

openssl genrsa -out server-key.pem 4096

输出

Generating RSA private key, 4096 bit long modulus
 ...........................++
 ................++
 e is 65537 (0x10001)

5.CA来签署公钥

openssl req -subj "/CN=$HOST" -sha256 -new -key server-key.pem -out server.csr
比如
openssl req -subj "/CN=192.168.1.106" -sha256 -new -key server-key.pem -out server.csr
或
openssl req -subj "/CN=www.baidu.com" -sha256 -new -key server-key.pem -out server.csr

我自己 局域网

openssl req -subj "/CN=192.168.231.139" -sha256 -new -key server-key.pem -out server.csr

6.白名单

也就是你接下来要允许那些ip可以连接到服务器的docker,因为已经是ssl连接,所以我推荐配置0.0.0.0,也就是所有ip都可以连接(但只有拥有证书的才可以连接成功),这样配置好之后公司其他人也可以使用。如果你不想这样,那你可以配置ip,用逗号分隔开。下面的$Host依旧是你服务器外网的IP或者域名,请自行替换。
如果你填写的是ip地址的话命令如下
echo subjectAltName = IP:$HOST,IP:0.0.0.0 >> extfile.cnf
如果你填写的是域名的话命令如下
echo subjectAltName = DNS:$HOST,IP:0.0.0.0 >> extfile.cnf

$HOST代表服务器外网IP或域名
我使用ip
echo subjectAltName = IP:192.168.231.139,IP:0.0.0.0 >> extfile.cnf

7.执行命令,将Docker守护程序密钥的扩展使用属性设置为仅用于服务器身份验证

 echo extendedKeyUsage = serverAuth >> extfile.cnf

8.生产签名证书

openssl x509 -req -days 365 -sha256 -in server.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out server-cert.pem -extfile extfile.cnf

密码最好和之前设置的密钥一样

9.生产客户端的key.pem

openssl genrsa -out key.pem 4096

openssl req -subj '/CN=client' -new -key key.pem -out client.csr

10.要使用密钥适合客户端身份验证

创建扩展配置文件

echo extendedKeyUsage = clientAuth >> extfile.cnf

echo extendedKeyUsage = clientAuth >> extfile-client.cnf

11.生成cert.pem,生成前面证书

openssl x509 -req -days 365 -sha256 -in client.csr -CA ca.pem -CAkey ca-key.pem \-CAcreateserial -out cert.pem -extfile extfile-client.cnf

12.删除不需要的文件,两个证书签名请求

rm -v client.csr server.csr extfile.cnf extfile-client.cnf

13.修改权限

要保护您的密钥免受意外损坏,请删除其写入权限。要使它们只能被您读取,更改文件模式

chmod -v 0400 ca-key.pem key.pem server-key.pem

证书可以是对外可读的,删除写入权限以防止意外损坏

chmod -v 0444 ca.pem server-cert.pem cert.pem

14.归集服务器证书

cp server-*.pem  /etc/docker/
cp ca.pem /etc/docker/
# 以上两步操作都在ca文件夹内,如果当前不在ca文件夹,需加上路径

15.修改Docker配置

vim /lib/systemd/system/docker.service

使Docker守护程序仅接受来自提供CA信任的证书的客户端的连接

ExecStart=/usr/bin/dockerd
替换为:
ExecStart=/usr/bin/dockerd --tlsverify --tlscacert=/usr/local/ca/ca.pem --tlscert=/usr/local/ca/server-cert.pem --tlskey=/usr/local/ca/server-key.pem -H tcp://0.0.0.0:2379 -H unix:///var/run/docker.sock

16.重新加载daemon并重启docker

systemctl daemon-reload 
systemctl restart docker

17.开放2375端口

不同的服务器设置不同

/sbin/iptables -I INPUT -p tcp --dport 2379 -j ACCEPT

iptables-save

18.重启 docker

systemctl restart docker

IDEA操作Docker

1.保存相关客户端的pem文件到本地

先在本地创建目录

F:\docker\ca

再将虚拟机中ca对应的几个文件拷贝刀本地ca目录中

本地拷贝

2.IDEA中CA配置

idea中ca修改1

pom修改

idea中ca中pom修改

十三.Docker图形化工具

1.查看portainer

docker search portainer

2.portainer镜像下载

docker pull portainer/portainer

3.启动dockerui容器

docker run -d --name portainerUI -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock portainer/portainer

4.浏览器访问

192.168.231.139:9000

5.图形化工具

密码123456789

图形化工具1

图形化工具2

图形化工具3

十四.Docker Compose

负责快速的部署分布式应用

两个重要概念

  • 服务:一个应用的容器,实际上可以包括若干运行相同镜像的容器实例
  • 项目:由一组关联的应用容器组成的一个完整业务单元,在docker-compose.yml文件中定义

1.Docker-compose的安装

#1 github的官方网站 搜索Docker compose
#2 找到 下载好的二进制文件
https://github.com/docker/compose/releases
#2.1 将下载好的文件拖入linux中/usr/local目录下
mv docker-compose-linux-x86_64 /usr/local(也可以直接拖入对应目录中)
#2.2 修改名称(方便后面使用) 并修改其为可执行文件
mv docker-compose-Linux-x86_64 docker-compose
chmod 777 docker-compose
#2.3 放入bin 全局可以执行
mv docker-compose /usr/local/bin

测试

在任意目录下
docker-compose --version
Docker Compose version v2.14.2
docker-compose version 1.24.1, build 4667896b

2.Docker-compose的使用

1.创建目录

mkdir -p /opt/docker-deploy-cluster
cd /opt/docker-deploy-cluster
vi docker-compose.yml

2.编写docker-compose.yml

按照yml语法格式编写

同时启动五个服务

version: '3'
services:
  docker-deploy-8080:
    restart: always
    image: zxy-learn/docker-deploy
    container_name: docker-deploy-8080
    ports:
     - "8081:8080"
  docker-deploy-8081:
    restart: always
    image: zxy-learn/docker-deploy
    container_name: docker-deploy-8081
    ports:
     - "8081:8080"
  docker-deploy-8082:
    restart: always
    image: zxy-learn/docker-deploy
    container_name: docker-deploy-8082
    ports:
     - "8082:8080"
  docker-deploy-8083:
    restart: always
    image: zxy-learn/docker-deploy
    container_name: docker-deploy-8083
    ports:
     - "8083:8080"
  docker-deploy-8084:
    restart: always
    image: zxy-learn/docker-deploy
    container_name: docker-deploy-8084
    ports:
     - "8084:8080"

3.docker-compose的常用命令

docker-compose也是基于docker的命令

这些命令docker-deploy-cluster目录下(即由yml配置目录下执行)

docker-compose up -d  (后台的方式运行yml中所有的容器) 
后面没有加具体的容器类别或名 就是指全部

docker-compose 命令 --help                     获得一个命令的帮助
docker-compose up -d nginx                     构建启动nignx容器
docker-compose exec nginx bash                 登录到nginx容器中
docker-compose down                            此命令将会停止 up 命令所启动的容器,并移除网络
docker-compose ps                              列出项目中目前的所有容器
docker-compose restart nginx                   重新启动nginx容器
docker-compose build nginx                     构建镜像 
docker-compose build --no-cache nginx          不带缓存的构建
docker-compose top                             查看各个服务容器内运行的进程 
docker-compose logs -f nginx                   查看nginx的实时日志
docker-compose images                          列出 Compose 文件包含的镜像
docker-compose config                          验证文件配置,当配置正确时,不输出任何内容,当文件配置错误,输出错误信息。 
docker-compose events --json nginx             以json的形式输出nginx的docker日志
docker-compose pause nginx                     暂停nignx容器
docker-compose unpause nginx                   恢复ningx容器
docker-compose rm nginx                        删除容器(删除前必须关闭容器,执行stop)
docker-compose stop nginx                      停止nignx容器
docker-compose start nginx                     启动nignx容器
docker-compose restart nginx                   重启项目中的nignx容器
docker-compose run --no-deps --rm php-fpm php -v   在php-fpm中不启动关联容器,并容器执行php -v 执行完成后删除容器

4.docker-compose使用多个配置文件,

docker-compose命令的-f参数支持使用多个配置文件,

docker-compose -f ./docker-compose.a.yaml -f ./docker-compse.b.yaml up -d

注意

ps:同一个配置文件一次只创建一个镜像,运行两次也是只能创建一个镜像,运行第二次会更新镜像,而不是创建两个镜像,所以如果要创建多个镜像就要配置多个镜像

十五.Docke的CI和CD(未学习)

posted @ 2023-06-04 22:43  西东怪  阅读(19)  评论(0编辑  收藏  举报
返回顶端