云原生 之 docker

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


一、Docker基本组成 Docker Documentation


二、Docker的安装

1. 环境准备

先通过finalShell连接到服务器

2. 查看系统内核和系统信息

uname -r #查看系统内核版本

cat /etc/os-release #查看系统版本

3. 安装 

选择自己对应的系统安装,例如我

01 -  先卸载原Docker

sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

02 - 需要的安装包

 sudo yum install -y yum-utils

03 - 设置镜像的仓库

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 # 阿里云,推荐使用

04 -  更新 yum 软件包索引(最好)

sudo yum makecache fast

05 - 安装 docker docker-ce 社区    ee 企业版

sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin

06 - 启动 docker

systemctl start docker

07 -  查看docker版本号

docker version

08 - 设置开机自启动

systemctl enable docker

09 - 测试 hello word

docker run hello-world

10 - 卸载docker

sudo yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin

sudo rm -rf /var/lib/docker

11 - 配置阿里云镜像加速 

一步一步执行第三个框框的命令

4. Docker运行流程 

5. Docker运行原理

 Docker为什么比VM Ware快?

  • Docker有着比虚拟机更少的抽象层。
  • Docker 利用的是宿主机的内核,vm需要的是 Guest OS。

所以说,新建一个容器的时候,doker不需要像虚拟机一样重新加载一个操作系统内核,避免引导。虚拟机是加载 Guest OS,分钟级别的。而 Docker 是利用宿主机的操作系统,省略了这个复杂的过程,秒级。


三、Docker的常用命令 

1. 帮助命令 docker | Docker Documentation

docker version        # 查看docker版本信息
docker info 	      # 显示docker的系统信息,包括镜像和容器的数量
docker 命令 --help     # 帮助命令

 2. 镜像命令

 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 : 下载镜像

# 下载镜像 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 : 删除镜像 

# 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目录下相应的镜像文件即可

3. 容器命令

说明:我们有了镜像才可以创建容器,Linux,下载一个 centos 镜像来学习,开始套娃

docker pull centos

docker run 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

docker ps : 列出所有运行中的容器

[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 : 退出容器 

exit              # 直接容器停止并退出
Ctrl + P + Q      # 退出不停止

docker rm : 删除容器 

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

4. 其他命令

docker run -d : 后台启动容器

docker run -d 镜像名字
[root@VM-0-4-centos ~]# docker run -d centos
7fc42aaf4d5d2a7c9713639b47a9711ae9c8bc4f79e37a087676e2c5b6bbc5f7

docker ps
# 问题 ,发现没有centos在运行,刚刚后台启动的已经停止了
# 常见的坑 docker 容器使用后台运行,就必须要有个前台进程,docker 发现没有应用,就会自动停止
# nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序另了

docker logs : 查看日志

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 : 查看容器中进程信息

docker top 433a7721d05a

UID                 PID                 PPID                C                   
root                14984               14953               0                   
root                15085               14984               0                   

#UID : 用户id
#PID : 父id
#PPID : 进程id

docker inspect  : 查看镜像元数据

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 : 进入当前正在运行的容器 

通常容器都是使用后台方式运行的,有可能需要进入容器,修改一些配置

# 方式一 :  进入容器后开启一个新的终端,可以在里面操作
docker exec -it 容器id /bin/bash

# 方式二 : 进入容器正在执行的终端,不会启动新的进程!  正在执行当前的代码~
docker attach 容器id

docker cp : 拷贝数据

一、从容器中拷贝数据到主机中
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
    

5. 命令小结 


四、练习 

1. Docker 安装 Nginx

01 - 搜索镜像

# 命令搜索
docker search nginx

#去docker hub搜索

02 - 下载镜像

docker pull nginx

03 - 新建容器并运行  

docker run -d --name nginx01 -p 3344:80 nginx

#-d          后台运行
#--name      给容器命名
#-p          宿主机端口 : 容器内部端口       

04 - 访问nginx

curl localhost:3344

端口暴露的概念 

05 - 查看nginx配置 

# 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配置文件,都需要进入容器内部,很麻烦

如果可以在容器外部提供一个映射路径,达到在容器外部修改文件,容器内部就可以自动修改

需要使用数据卷~后续说

2. Docker 安装 Tomcat

01 - 直接新建容器

# 不用去下载,直接新建容器,如果没有的话,会自动去下载

# 官方的使用
docker run -it --rm tomcat:9.0

# 之前的启动都是停止了容器后,容器还可以查到

#docker run -it --rm 一般用来测试,用完即删除

docker pull tomcat

02 - 启动运行

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

03 - 外网访问错误 

这是阉割版的tomcat  ,linux命令少了,没有webapps

阿里云镜像的原因,默认是最小的镜像,所有不必要的都剔除了

04 -  修改

进入容器

docker exec -it tomcat01 /bin/bash

把webapps.dist目录中的东西拷贝到webapps即可 

cp -r webapps.dist/* webapps

05 - 刷新


五、可视化面板Portainer

1. 下载portainer

docker run -d -p 3344:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

02 - 外网访问3344端口 

六、部署

1. 部署前端项目

01 - 压缩dist文件夹后上传到服务器

02 - 在服务器解压

下载 unzip

yum -y install unzip

使用 unzip

进入目录 unzip + 压缩包名称 

03 - 拷贝解压后的文件夹进容器

# 先进入文件目录中。   拷贝到nginx的 star/dis 这个目录下
docker cp dist abe8194ac1bb:/star/dist

04 - 进入Nginx容器

# 如果之前没有新建,这里新建一个容器,建完后再复制文件进来
docker run -d --name nginx01 -p 3344:80 nginx

# 如果之前存在
docker start 容器id

05 - 查找nginx路径

whereis nginx

06 - 修改配置文件

# 如果没有vim命令
# apt update
# apt-get install vim

vim /etc/nginx/conf.d/default.conf

07 - 重新加载nginx

nginx -s reload

08 - 看效果

在网页上输入 服务器ip地址:3344

2. 部署MySQL

后续更新~

猜你喜欢

转载自blog.csdn.net/a15297701931/article/details/125151103