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中的资源也没有了等*
开放端口
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就会出现首页
修改自定义的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.创建数据卷
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插件
3.Linux开发物理2379端口
firewall-cmd --zone=public --add-port=2379/tcp --permanent
firewall-cmd --reload
4.IDEA连接远程Docker
https://ryk5t398.mirror.aliyuncs.com
十.Idea中的docker操作
1.快速创建一个容器并启动
也可以
十一.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等操作
十二.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配置
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
十四.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:同一个配置文件一次只创建一个镜像,运行两次也是只能创建一个镜像,运行第二次会更新镜像,而不是创建两个镜像,所以如果要创建多个镜像就要配置多个镜像