Docker
==Docker 是一个开源的应用容器引擎,是虚拟化的一种轻量级替代技术。== 官网:Docker: Accelerated Container Application Development 文档地址:Docker Docs Doker镜像仓库地址:https://hub.docker.com/
安装手册地址:Install Docker Engine on CentOS | Docker Docs
Dockder的安装(centos)
官网安装篇:Install Docker Engine on CentOS | Docker Docs
环境准备
# 系统内核环境在3.1以上
Last login: Thu Nov 17 16:05:37 2022 from 192.168.95.1
[root@cwsEds01 ~]# uname -r
3.10.0-1160.71.1.el7.x86_64
#系统
[root@cwsEds01 ~]# cat /etc/os-release
NAME="CentOS Linux"
VERSION="7 (Core)"
ID="centos"
ID_LIKE="rhel fedora"
VERSION_ID="7"
PRETTY_NAME="CentOS Linux 7 (Core)"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:centos:centos:7"
HOME_URL="https://www.centos.org/"
BUG_REPORT_URL="https://bugs.centos.org/"
CENTOS_MANTISBT_PROJECT="CentOS-7"
CENTOS_MANTISBT_PROJECT_VERSION="7"
REDHAT_SUPPORT_PRODUCT="centos"
REDHAT_SUPPORT_PRODUCT_VERSION="7"
开始安装
# 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 \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 推荐使用阿里云的。
# 安装容器之前,更新yum软件包索引。
yum makecache fast
# 4.安装容器相关的。docker-ce(社区版)docker-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
卸载dockder
# 1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io
# 2.删除资源
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
# /var/lib/docker docker的默认工作路径
阿里云加速器
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://a6jwd2z5.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
Dockder的运行
Docker常用指令
帮助命令
docker version #查看docker的版本
docker info #查看docker的系统详细信息
dicker 命令 --help
镜像命令
指令 | 作用 |
---|---|
docker images | 查询系统所有镜像 |
docker images -a | 列全部镜像 |
docker images -q | 只显示镜像的id |
docker images --查看信息
[root@cwsEds01 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 14 months ago 13.3kB
#详情
REPOSITORY #(仓库源)
TAG #标签
IMAGE ID #id
CREATED #创建时间
SIZE #镜像的大小
docker search --搜索
[root@cwsEds01 home]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13496 [OK]
mariadb MariaDB Server is a high performing open sou… 5153 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 696 [OK]
percona Percona Server is a fork of the MySQL relati… 594 [OK]
bitnami/mysql Bitnami MySQL Docker Image 79 [OK]
docker pull --下载(拉取)
[root@cwsEds01 home]# docker pull mysql
Using default tag: latest #如果不写版本号安装的就是最新的
latest: Pulling from library/mysql
72a69066d2fe: Pull complete
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实下载地址
#指定版本号
docker pull mysql:8.0
docker pull mysql:5.7
注意这里的版本号笔记在dockerhup上有的!!!
docker rmi -f 删除镜像
指令 | 作用 |
---|---|
docker rmi -f 镜像id或者名称 | 删除对应的镜像 |
docker rmi -f $(docker images -aq) | 删除所有镜像 |
[root@cwsEds01 home]# docker rmi -f 3218b38490ce
Untagged: mysql:8.0
Untagged: mysql:latest
Untagged: mysql@sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709
Deleted: sha256:3218b38490cec8d31976a40b92e09d61377359eab878db49f025e5d464367f3b
Deleted: sha256:aa81ca46575069829fe1b3c654d9e8feb43b4373932159fe2cad1ac13524a2f5
Deleted: sha256:0558823b9fbe967ea6d7174999be3cc9250b3423036370dc1a6888168cbd224d
Deleted: sha256:a46013db1d31231a0e1bac7eeda5ad4786dea0b1773927b45f92ea352a6d7ff9
Deleted: sha256:af161a47bb22852e9e3caf39f1dcd590b64bb8fae54315f9c2e7dc35b025e4e3
Deleted: sha256:feff1495e6982a7e91edc59b96ea74fd80e03674d92c7ec8a502b417268822ff
Deleted: sha256:8805862fcb6ef9deb32d4218e9e6377f35fb351a8be7abafdf1da358b2b287ba
Deleted: sha256:872d2f24c4c64a6795e86958fde075a273c35c82815f0a5025cce41edfef50c7
Deleted: sha256:6fdb3143b79e1be7181d32748dd9d4a845056dfe16ee4c827410e0edef5ad3da
Deleted: sha256:b0527c827c82a8f8f37f706fcb86c420819bb7d707a8de7b664b9ca491c96838
Deleted: sha256:75147f61f29796d6528486d8b1f9fb5d122709ea35620f8ffcea0e0ad2ab0cd0
Deleted: sha256:2938c71ddf01643685879bf182b626f0a53b1356138ef73c40496182e84548aa
Deleted: sha256:ad6b69b549193f81b039a1d478bc896f6e460c77c1849a4374ab95f9a3d2cea2
容器命令
安装centos
docker pull centos
新建容器并启动--run
指令 | 作用 |
---|---|
docker run -it centos /bin/bash | 运行容器 |
docker run -d 名称 | 后台运行 |
docker run -it 名称 | 使用交互方式进行运行,进入容器查看内容 |
docker run -p 名称 | 指定端口 -p 8080:8080 |
exit | 退出容器 |
ctrl+P+Q | 退出容器后台运行 |
查正在运行的程序--ps
指令 | 作用 |
---|---|
docker ps | 查看正在运行的程序 |
docker ps -aq | 查看正在运行的程序和历史运行程序 |
启动和停止容器的操作--stop
指令 | 作用 |
---|---|
docker start 容器id | 启动容器 |
docker stop 容器id | 停止容器 |
docker restart 容器id | 重启容器 |
docker kil 容器id | 强制停止容器 |
查看容器进程
#命令
docker top 3fc918afd945
# docker top 3fc918afd945
UID PID PPID C STIME TTY TIME CMD
root 13108 13088 0 14:35 pts/0 00:00:00 /bin/bash
查看镜像云数据--inspect
#查看对应的数据源
docker inspect 容器id
进入当前正在运行的程序--exec
docker exec -it 容器id #进入容器后开启一个新的终端,可以在里面操作
# 例子: docker exec -it nginx01 /bin/bash
docker attach 容器id #进入容器正在执行的终端,不会启动新的进程
拷贝容器的数据到主机上--cp
#语法
docker cp 容器id:文件路径 拷贝的路径
#例子
docker cp 7e0134ea8656:/home/text.java /home
安装nginx
dockerhub地址:https://hub.docker.com/_/nginx
#搜索dockerhup是否有对应的资源
docker search nginx
#拉取
docker pull nginx
#运行
docker run -d --name nginx01 -p 6666:80 nginx
# -d 后台运行
# --name nginx01 表示别名
# -p 把nginx默认的80端口映射到6666端口
#访问
主机的IP地址:6666 #如果不知到自己主机的ip地址可使用:ifconfig
本机测试 使用curl
#[root@cwsEds01 home] curl localhost:8808
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
[root@cwsEds01 home]#
nginx的文件目录
#进入nginx
docker exec -it 名称 /bin/bash
#查看目录
whereis nginx
目录 | 作用 |
---|---|
/etc/nginx | 配置文件存放位置 |
/usr/share/nginx | 页面存放位置 |
nginx的基础配置
#user nobody;
worker_processes 1; //进程个数,默认开启的时候启动一个子进程
#error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info;
#pid logs/nginx.pid;
events {
worker_connections 1024; //每个进程可以创建1024个连接
}
http {
include mime.types; //将另一个文件,引入到主配置文件
default_type application/octet-stream; //默认类型(在mime.types没有的类型)
//#默认文件类型,如果mime.types预先定义的类型没匹配上,默认使用二进制流的方式传输
sendfile on; //数据0拷贝,直接从你的电脑通过无线拷贝到我的电脑,不需要借助u盘
keepalive_timeout 65; //保持连接,时间超时
server { //一个server代表一个主机,nginx可以配置多个主机
listen 80; //默认服务器端口是80,通过端口后来区分不同的主机
server_name localhost; //配置域名或主机名
#http://baidu.com/xxo/index.html 为URL
#/xxo/index.html 为URI(资源)
location / { //重点内容(域名后面的子目录,类似于URI)
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html; //发生服务器内部错误
location = /50x.html { //不同的错误码会转向不同的html下
root html;
}
}
工作原理图
安装tomcat
dockerhub地址:https://hub.docker.com/_/tomcat
#安装
docker pull tomcat
#运行
docker run -it -d --name tomcat01 -p 8889:8080 tomcat
#测试
curl localhsot:8889
#访问
主机的IP地址:8889 #如果不知到自己主机的ip地址可使用:ifconfig
出现404?
#进入tomcat
docker exec -it tomcat01 /bin/bash
#查看webapps文件下发现是空的
#应为阿里云镜像默认下载最小压缩版本
#查看目录后发现有一个webapps.dist 目录,此时我们只要把webapps.dist拷贝到webapps文件夹下就行
cp /webapps/* /wenapps
#重新访问即可
commit镜像
和git相识,创建一个新的版本提交下次可以直接使用
#语法
docker commit -m="提交的描述信息" -a="作者" 容器id 目标镜像名:[tag]
案例:
在docker拉去下来的tomcat启动是没有页面的,当我们配置完成有页面后是使用commit提交一个新的版本和配置,下次就可以直接用了!!!
#查看进程
[root@cwsEds01 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
01888f3760c5 tomcat "catalina.sh run" 2 hours ago Up 2 hours 0.0.0.0:8889->8080/tcp, :::8889->8080/tcp tomcat03
d9084fc00e66 nginx "/docker-entrypoint.…" 3 hours ago Up 3 hours 0.0.0.0:8808->80/tcp, :::8808->80/tcp nginx01
7e0134ea8656 centos:7 "/bin/bash" 4 hours ago Up 4 hours confident_newton
#设置tomcat
docker exec -it tomcat01 /bin/bash
#查看webapps文件下发现是空的
#应为阿里云镜像默认下载最小压缩版本
#查看目录后发现有一个webapps.dist 目录,此时我们只要把webapps.dist拷贝到webapps文件夹下就行
cp /webapps/* /wenapps
#退出
exit
#执行指令
[root@cwsEds01 ~] docker commit -a='chen' -m='new version' 01888f3760c5 newtomcat:1.0
sha256:e70b9a45be8fbbe482f2468e5fd51bd021bf8f488c9e06e1e9e70b577b141dd2xxxxxxxxxx
#启动测试
docker run -it -d --name tocat06 -p 8887:8080 newtomcat
#启动完成
curl localhost:8887
容器数据卷
卷的设计目的就是数据的持久化,完全独立于容器的生存周期,因此Docker不会在容器删除时删除其挂载的数据卷。
跟Linnux的tools类似,也可以理解为双向数据绑定。
docker run -it -v 主机目录:容器目录
#测试
docker run -it -v /home/test:/home centos /bin/bash
#使用
docker inspect dbc88564d349
例子:
-
主机目录上的home上创建一个test.java
-
在容器目录 /home/test查看是否有test.java
-
在本机使用vim编写内容
-
在容器目录使用cat 指查看内容
mysql配置容器数据卷
安装mysql
docker pull mysql5.7
docker run -d -p 3301:3306 -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#-d 后台运行
#-p 3301:3306 端口解析
#-v /home/mysql/conf:/etc/mysql/conf.d 配置容器数据卷
#-v /home/mysql/data:/var/lib/mysql 配置数据库为
#-e MYSQL_ROOT_PASSWORD=123456 配置密码
#--name mysql01 配置别名
使用navicat的ssh测试连接。
优点:当容器被删除时本地的数据仍然存在的,起到了防止数据丢失的情况。
Dockerfile
什么是 Dockerfile?
Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。
使用指令
FROM # 基础镜像,一切从这里开始构建
MAINTAINER # 镜像是谁写的:姓名+邮箱
RUN # 镜像构建的时候需要运行的命令
ADD # 步骤:tomcat镜像,这个tomcat压缩包!添加内容
WORKDIR # 镜像的工作目录
VOLUME # 挂载的目录
EXPOSE # 暴露端口配置
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD # 当构建一个被继承DockerFile这个时候就会运行ONBUILD的指令。触发指令。
COPY # 类似ADD,将我们文件拷贝到镜像中
ENV # 构建的时候设置环境变量!
制作自己的centos
# 1. 编写dockerfile的文件
FROM centos:7 #基础镜像
MAINTAINER sywl<xxx@qq.com> #作者信息
ENV MYPATH /usr/local #定义变量MYPATH
WORKDIR $MYPATH #镜像的工作目录
RUN yum -y install vim #在docker中默认下载的centos时没有 vim指令的,现在重新构建时区下载
RUN yum -y install net-tools #和上面相同
EXPOSE 80 #配置端口
CMD echo $MYPATH #输出地址
CMD echo "-----end-----" #输出运行信息
CMD /bin/bash #启动模式
# 2. 通过这个文件构建镜像
# 命令:docker build -f dockerfile文件路径 -t 镜像名:[tag]
docker build -f mydockerfile-centos -t mycentos:0.1 .
#运行centos
docker run -it mycentos
Dockerfile制作自己的tomcat
环境下载地址:
链接:百度网盘 请输入提取码 提取码:6666
1.准备环境
2.编写==DockerFile== 文件,并使用Dockerfile命名,build的时候就奴需要区使用 -f 制定了。
#创建一个readme.txt 用于记录对应的日志或者文档
touch readme.txt
#编写dockerfile
vim DockerFile
FROM centos:7 #基础镜像
MAINTAINER cws<2411286960@qq.com> #作者信息
COPY readme.txt /usr/local/readme.txt #拷贝
ADD jdk-8u351-linux-x64.tar.gz /usr/local/ #解压jdk
ADD apache-tomcat-9.0.22.tar.gz /usr/local/ #解压tomcat
RUN yum -y install vim #添加 vim指令
RUN yum -y install net-tools #添加 ifconfig指令
EVN MYPATH /usr/local #定义变量(固定写法)
WORKDIR $MYPATH #设置工作目录(固定写法)
ENV JAVA_HOME /usr/local/jdk1.8.0_351 #配置java环境(固定写法)
ENV CLASS_PATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar #配置java环境(固定写法)
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.22 #配置tomcat环境(固定写法)
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.22 #配置tomcat环境(固定写法)
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin #配置tomcat环境(固定写法)
EXPOSE 8080 #开发端口
CMD /usr/local/apache-tomcat-9.0.22/bin/startup.sh && tail -F /usr/local/apache-tomcat-9.0.22/bin/logs/catalina.out #一运行容器就启动tomcat
构建
docker build -f Dockerfile -t mytomcat .
启动镜像并挂载配置数据卷
docker run -it -d
--name tomcat01
-p 3355:8080
-v /home/cws/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test
-v /home/sywl/build/tomcat/tomcatlog:/usr/local/apache-tomcat-9.0.22/logs
mytomcat
#交互
-it
#后台运行
-d
#容器名称
--name tomcat01
#映射端口
-p 3355:8080
#配置数据卷到本地的/home/cws/tomcat/test
-v /home/cws/tomcat/test:/usr/local/apache-tomcat-9.0.22/webapps/test
#日志配置
-v /home/sywl/build/tomcat/tomcatlog:/usr/local/apache-tomcat-9.0.22/logs
测试挂载是否成功
#进入挂载目录
cd /home/cws/tomcat/test
#新建WEB-INF
mkdir WEB-INF
#编写web.xml配置
vim web.xml
# /home/sywl/build/tomcat/test/WEB-INF/web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">
</web-app>
#cd 出去 test文件夹创建index.html页面
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<h1>测试成功!!!</h1>
</body>
</html>
#访问
http://192.168.95.128:3355/test/
docker部署SpringBoot项目
1.安装mysql
#安装mysql
docker install mysql:8
#运行
docker run -it -d -p 3306:3306 --name sh-mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql:8
2.idea安装docker插件
作用:dockerfile提示
3.在项目根目录编写Dockerfile文件
FROM openjdk:8 #基于jdk8
MAINTAINER cws<2411286960@qq.com> #作者信息
COPY *.jar /app.jar #当前目录下的架包拷贝到app.jar
CMD ["--server.port=8900"] #配置命令
EXPOSE 8900 #暴露端口
ENTRYPOINT ["java","-jar","/app.jar"] #运行 java -jar aap.jar
4.进入虚拟机构建容器
docker build -t myapp . #如果你是以Dockerfile命名的就执行这条
docker build -f 文件名 -t 别名:版本 . #不是以Dockerfile命名
5.启动容器
docker run -it -d --name app -p 8900:8900 myapp
6.测试
docker部署vue项目
安装nginx
#拉取
docker pull nginx
#启动
docker run -it --name mynginx -d nginx
#查看是否启动成功
docker ps
#将文件复制出来
mkdir /home/staynginx
#进入staynginx
cd /home/staynginx
#创建对应目录--这里也可以在挂载的时候自动去创建
mkdir log
mkdir html
mkdir conf
#复制
docker cp mynginx:/etc/nginx/nginx.conf /home/staynginx/
docker cp mynginx:/etc/nginx/conf.d/default.conf /home/staynginx/conf/
#删除和停止刚启动的容器
docker stop mynginx
docker rm mynginx
#启动并挂载
docker run -it --name mynginx -p 81:80
-v /home/staynginx/conf:/etc/nginx/conf.d
-v /home/staynginx/nginx.conf:/etc/nginx/nginx.conf
-v /home/staynginx/html:/usr/share/nginx/html
-v /home/staynginx/log:/var/log/nginx
-d nginx
如果使用的是服务器要把安全组打开
查看防火墙是否开启,并开启端口
# 查看firewall服务状态
systemctl status firewall
# 开启、重启、关闭、firewalld.service服务
#开启
systemctl start firewalld.service
#重启
systemctl restart firewalld
#关闭
systemctl stop firewalld.service
#重新加载配置
firewall-cmd --reload
#查看防火墙规则
firewall-cmd --list-all #查看所有信息
firewall-cmd --list-ports #只看端口信息
firewall-cmd --permanent --zone=public --add-port=80/tcp #开启端口
systemctl restart firewalld.service #重启防火墙
#指令含义:
--zone #作用域
--add-port=80/tcp #添加端口,格式:端口/通讯协议
--permanent #永久
打包vue项目!
把项目上传到html目录下,访问是否成功!
配置nginx方向代理
server {
listen 81; // 监听81端口
server_name localhost; // 因为我的后端和前端都部署到了宝塔上,所以server_name可以直接写localhost
// 配置代理
/*
第一个代理含义:
我的网站地址是http://120.77.8.124:81/#/login/passLogin,
当它看到81后的第一条斜杠时会到`/www/wwwroot/120.77.8.124`路径底下找index.html页面
*/
location / {
index index.html;
root /www/wwwroot/120.77.8.124;
}
/*
配置接口代理
我前端的代理服务器代码块下的图所示。
^~/prod-api/:当nginx看到路由中包含/prod-api/会自动将/prod-api/去到,并将/prod-api/前边的部分替换成`http://localhost:15050/`
*/
location ^~/prod-api/ {
proxy_pass http://192.144.215.215:8900/;
}
}