1.假设已经买好了域名 阿里云-上云就上阿里云
2.假设已经下好了连接服务器的工具,我这使用的 FinalShell,也可在我资源中下载
3.就不过多介绍docker了,太多原理,对于我这小小前端,我也理解不了,先用着吧~
docker官网 : Docker Documentation
docker hub : Docker Hub
目录
一、Docker基本组成 Docker Documentation
编辑
二、Docker的安装
1. 环境准备
2. 查看系统内核和系统信息
3. 安装
01 - 先卸载原Docker
02 - 需要的安装包
03 - 设置镜像的仓库
04 - 更新 yum 软件包索引(最好)
05 - 安装 docker docker-ce 社区 ee 企业版
06 - 启动 docker
07 - 查看docker版本号
08 - 设置开机自启动
09 - 测试 hello word
10 - 卸载docker
11 - 配置阿里云镜像加速
4. Docker运行流程
5. Docker运行原理
三、Docker的常用命令
1. 帮助命令 docker | Docker Documentation
2. 镜像命令
docker images : 查看所有镜像
docker pull : 下载镜像
docker rmi : 删除镜像
3. 容器命令
docker run centos : 新建容器并启动
docker ps : 列出所有运行中的容器
exit : 退出容器
docker rm : 删除容器
启动/停止容器操作
4. 其他命令
docker run -d : 后台启动容器
docker logs : 查看日志
docker top : 查看容器中进程信息
docker inspect : 查看镜像元数据
docker exec -it : 进入当前正在运行的容器
docker cp : 拷贝数据
5. 命令小结
四、练习
1. Docker 安装 Nginx
01 - 搜索镜像
02 - 下载镜像
03 - 新建容器并运行
04 - 访问nginx
05 - 查看nginx配置
2. Docker 安装 Tomcat
01 - 直接新建容器
02 - 启动运行
03 - 外网访问错误
04 - 修改
05 - 刷新
五、可视化面板Portainer
1. 下载portainer
2. 外网访问3344端口
六、部署
1. 部署前端项目
01 - 压缩dist文件夹后上传到服务器
02 - 在服务器解压
下载 unzip
使用 unzip
03 - 拷贝解压后的文件夹进容器
04 - 进入Nginx容器
05 - 查找nginx路径
06 - 修改配置文件
07 - 重新加载nginx
08 - 看效果
2. 部署MySQL
先通过finalShell连接到服务器
uname -r #查看系统内核版本
cat /etc/os-release #查看系统版本
选择自己对应的系统安装,例如我
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
sudo yum install -y yum-utils
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo # 官方默认,不推荐使用
sudo yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo # 阿里云,推荐使用
sudo yum makecache fast
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
systemctl start docker
docker version
systemctl enable docker
docker run hello-world
sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo rm -rf /var/lib/docker
一步一步执行第三个框框的命令
所以说,新建一个容器的时候,doker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的。而 Docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级。
docker version # 查看docker版本信息
docker info # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help # 帮助命令
docker images
: 查看所有镜像[root@VM-0-4-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest bf756fb1ae65 13 months ago 13.3kB
REPOSITORY: 镜像的仓库源
TAG: 镜像的标签/版本信息
IMAGE ID: 镜像的ID
CREATED: 镜像的创建时间
SIZE: 镜像的大小
# 可选项
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像id
-f, --filter # 筛选,过滤数据
docker search
: 搜索镜像
也可用Docker hub查找Docker Hub
可加上-filter选项,用来过滤数据
-filter=STARS=3000 #搜索出来的镜像就是 stars 大于 3000
docker search mysql --filter=STARS=3000
# 下载镜像 docker pull 镜像名 [:tag]
[root@VM-0-4-centos ~]# docker pull mysql
Using default tag: latest # 如果不写 tag,默认就是latest
latest: Pulling from library/mysql
a076a628af6f: Pull complete # 分层下载,docker image 的核心,联合核减系统
f6c208f3f991: Pull complete
88a9455a9165: Pull complete
406c9b8427c6: Pull complete
7c88599c0b25: Pull complete
Digest: sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c # 签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest # 真实地址
-----------------------------------------------------------
# 等价于它
docker pull mysql
Status: Downloaded newer image for mysql:latest
-----------------------------------------------------------
# 指定版本下载
[root@VM-0-4-centos ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
# Already exists 已经存在的可以共用(牛逼)
a076a628af6f: Already exists
1831ac1245f4: Pull complete
Digest: sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
-----------------------------------------------------------
# 查看所有下载好的镜像
[root@VM-0-4-centos ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql 5.7 a70d36bc331a 3 weeks ago 449MB
mysql latest c8562eaf9d81 3 weeks ago 546MB
hello-world latest bf756fb1ae65 13 months ago 13.3kB
# docker rmi 名字 ( 一般用id删 )
# docker rmi 镜像id 根据id删除镜像
# docker rmi 镜像id 镜像id 根据多个id删除镜像
[root@VM-0-4-centos ~]# docker rmi c8562eaf9d81
Untagged: mysql:latest
Untagged: mysql@sha256:feada149cb8ff54eade1336da7c1d080c4a1c7ed82b5e320efb5beebed85ae8c
-----------------------------------------------------------
# 骚操作 递归删除所有镜像
docker rmi -f $(docker images -aq)
Untagged: mysql:5.7
Untagged: mysql@sha256:b3d1eff023f698cd433695c9506171f0d08a8f92a0c8063c1a4d9db9a55808df
Deleted: sha256:a70d36bc331a13d297f882d3d63137d24b804f29fa67158c40ad91d5050c39c5
Untagged: hello-world:latest
Untagged: hello-world@sha256:31b9c7d48790f0d8c50ab433d9c3b7e17666d6993084c002c2ff1ca09b96391d
Deleted: sha256:bf756fb1ae65adf866bd8c456593cd24beb6a0a061dedf42b26a993176745f6b
如果显示No such image,删除错误
删除/var/lib/docker/image/overlay2/imagedb/content/sha256目录下相应的镜像文件即可
说明:我们有了镜像才可以创建容器,Linux,下载一个 centos 镜像来学习,开始套娃
docker pull centos
每运行一次镜像,都会创建一个新的容器,每个容器互不干扰
可以理解为
docker run [可选参数] centos
# 参数说明
--name="Name" 容器名字,tomcat01 tomcat02 用来区分容器
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 制定容器端口 -p 8080:8080
-p ip 主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
容器端口
-P( 大写的P ) 随机制定端口
-----------------------------------------------------------
# 测试,启动并进入容器
[root@VM-0-4-centos ~]# docker run -it centos /bin/bash
# root 右侧名称变化了,说明已经进入了容器
[root@911c6a4376a6 /]# ls # 查看容器内的 centos 很多命令都是不完善的
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
-----------------------------------------------------------
# 从容器中退回主机
[root@911c6a4376a6 /]# exit
exit
[root@VM-0-4-centos ~]# docker ps [命令]
# 列出当前正在运行中的容器
-a # 列出当前正在运行中的容器 + 带出历史运行过的容器 docker ps -a
-n=? # 显示最新创建的容器 docker ps -a -n=1 看最近的一个
-q # 只显示容器的编号 docker ps -a -q | docker ps -aq
# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7ee7ec3ffb90 centos "/bin/bash" 5 minutes ago Exited (0) 3 minutes ago modest_curie
exit # 直接容器停止并退出
Ctrl + P + Q # 退出不停止
docker rm 容器id # 删除制定容器,不能删除正在运行的容器,如果要强制删除就 rm -f
docker rm -f $(docker ps -aq) # 递归删除所有容器
docker ps -a -q|xargs docker rm # 删除所有容器
docker start 容器id # 启动容器
docker restart 容器id # 重启容器
docker stop 容器id # 停止正在运行容器
docker kill 容器id # 强制停止当前容器,如果stop报错了,直接kill
docker run -d 镜像名字
[root@VM-0-4-centos ~]# docker run -d centos
7fc42aaf4d5d2a7c9713639b47a9711ae9c8bc4f79e37a087676e2c5b6bbc5f7
docker ps
# 问题 ,发现没有centos在运行,刚刚后台启动的已经停止了
# 常见的坑 docker 容器使用后台运行,就必须要有个前台进程,docker 发现没有应用,就会自动停止
# nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序另了
docker logs -f -t --tail number(条数) 容器
# 编写一个shell脚本模拟日志. 自己手敲,否则可能错误
# docker run -d centos /bin/sh -c "while true;do echo coderstar;sleep 1;done"
# 显示日志
-tf # 显示日志
--tail number(显示日志条数)
docker logs -tf --tail 2 433a7721d05a #显示两条日志
2022-06-07T02:51:50.475510127Z coderstar
2022-06-07T02:51:51.477609510Z coderstar
docker logs -tf 433a7721d05a #显示全部日志
docker top 433a7721d05a
UID PID PPID C
root 14984 14953 0
root 15085 14984 0
#UID : 用户id
#PID : 父id
#PPID : 进程id
docker inspect 容器id
[
{
"Id": "433a7721d05ac6f4b41663d", #容器id
"Created": "2022-06-07T02:51:30.977366901Z", #容器创建时间
"Path": "/bin/sh", #容器路径
"Args": [ #传递的参数
"-c",
"while true;do echo coderstar;sleep 1;done"
],
"State": { #状态
"Status": "running",
"Running": true,
"Paused": false,
"Restarting": false,
"OOMKilled": false,
"Dead": false,
"Pid": 14984,
"ExitCode": 0,
"Error": "",
"StartedAt": "2022-06-07T02:59:43.749500622Z",
"FinishedAt": "2022-06-07T02:55:12.840746241Z"
}
......
}
]
通常容器都是使用后台方式运行的,有可能需要进入容器,修改一些配置
# 方式一 : 进入容器后开启一个新的终端,可以在里面操作
docker exec -it 容器id /bin/bash
# 方式二 : 进入容器正在执行的终端,不会启动新的进程! 正在执行当前的代码~
docker attach 容器id
一、从容器中拷贝数据到主机中
docker cp 容器id:容器内路径 目的的主机路径
二、反向,从主机中拷贝数据到容器中
docker cp 主机路径 容器id:容器内路径
#栗子
1. 看存在什么镜像
docker images
2. 创建一个容器并启动
docker run -it centos /bin/bash
3. 进去容器的home目录
cd /home
6. 创建一个java文件
touch star.java
7. 退出容器
exit
8. 查看容器id
docker ps -a
9. 拷贝数据出来
docker cp 57eedbbbed80:/home/star.java /home
10. 在home文件夹中可以看到从容器中拷贝出来的文件了
11. 反向传输
docker cp /home/outside.java 57eedbbbed80:/home
# 命令搜索
docker search nginx
#去docker hub搜索
docker pull nginx
docker run -d --name nginx01 -p 3344:80 nginx
#-d 后台运行
#--name 给容器命名
#-p 宿主机端口 : 容器内部端口
curl localhost:3344
端口暴露的概念
# 1.通过容器名字进入容器
docker exec -it nginx01 /bin/bash
# 2.查看nginx在哪
whereis nginx
#nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
# 3.进入nginx目录
cd /etc/nginx. 配置
cd /usr/share/nginx html
现在每次改动nginx配置文件,都需要进入容器内部,很麻烦
如果可以在容器外部提供一个映射路径,达到在容器外部修改文件,容器内部就可以自动修改
需要使用数据卷~后续说
# 不用去下载,直接新建容器,如果没有的话,会自动去下载
# 官方的使用
docker run -it --rm tomcat:9.0
# 之前的启动都是停止了容器后,容器还可以查到
#docker run -it --rm 一般用来测试,用完即删除
docker pull tomcat
docker run -d -p 3355:8080 --name tomcat01 tomcat
这是阉割版的tomcat ,linux命令少了,没有webapps
阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除了
进入容器
docker exec -it tomcat01 /bin/bash
把webapps.dist目录中的东西拷贝到webapps即可
cp -r webapps.dist/* webapps
docker run -d -p 3344:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer
yum -y install unzip
进入目录 unzip + 压缩包名称
# 先进入文件目录中。 拷贝到nginx的 star/dis 这个目录下
docker cp dist abe8194ac1bb:/star/dist
# 如果之前没有新建,这里新建一个容器,建完后再复制文件进来
docker run -d --name nginx01 -p 3344:80 nginx
# 如果之前存在
docker start 容器id
whereis nginx
# 如果没有vim命令
# apt update
# apt-get install vim
vim /etc/nginx/conf.d/default.conf
nginx -s reload
在网页上输入 服务器ip地址:3344
后续更新~