Docker:十五分钟快速了解Docker快速部署nginx(2)

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: Docker:十五分钟快速了解Docker快速部署nginx(2)

Docker安装

Docker的组成结构

5.png


镜像:


Docker的镜像就像是一个模板,可以荣国这个模板来创建容器服务


例子:


tomcat ====》run ===》tomcat01容器(提供服务)


我们可以同过镜像创建多个容器(最终服务运行或者是项目运行都是在容器中的)


容器:


Docker利用容器技术,独立运行一个或者一组应用,通过容器来创建的


启动,停止,删除,等基本命令


目前我们可以把容器理解为一个建议的linux系统,项目都是跑在系统上的


仓库:


仓库就是存放镜像的地方


有私有的有共有的


DockerHub


阿里云等等厂商都有镜像服务


安装Docker

环境准备

需要会一点点linx的基础

linux : CentOS7

使用连接工具连接服务器操作

确认系统环境


[root@iZwz90ps06ioyada63oiwiZ ~]# uname -r
3.10.0-957.21.3.el7.x86_64
[root@iZwz90ps06ioyada63oiwiZ ~]# 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"

官方文档可以看到要求:

17.png

我们如果是用的linxu系统是 CentOS 那么必须是 7 版本以上才支持的


如果安装装过的话,建议删除之前的旧版本的docker

 #1·卸载掉旧的版本
 sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
#2 需要的安装包
 sudo yum install -y yum-utils
#3设置镜像的仓库,默认是国外的(建议大家使用阿里云的镜像)
sudo yum-config-manager \
    --add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#4 安装docker相关的内容
 yum install docker-ce docker-ce-cli containerd.io
#5 安装之后测试是否安装成功
systemctl start docker
#6查看docker的版本号
docker version

之后查看我们docker的版本即可

7.png



#7 运行docker的helloword

docker run hello-world

8.png


8.png8.png

# 8 如何查看docker下载的镜像呢?

docker images

# 就可以查看docker下载的位置了

9.png


了解 如何卸载docker

#1 卸载docker的相关内容
yum remove docker-ce docker-ce-cli containerd.io
#2 卸载docker的和我们下载容器
 sudo rm -rf /var/lib/docker
 sudo rm -rf /var/lib/containerd
# /var/lib/docker 是 docker的默认工作路径

提升效率

阿里云的容器加速

登录阿里云找到容器服务

10.png



找到镜像加速地址

11.png



配置使用


sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://v3ev0217.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


底层原理

docker是做什么工作的?

Docker是一个 Client server的系统,Docker是守护进程运行在主机上。通过socket从客户端访问


DockerServer接受到Docker-Client的指令,就会去执行这个命令。

12.png


Docker为什么比虚拟机快


Docker有着比虚拟机更少的抽象层

13.png



Docker利用的是主机的内核,vm需要的是Guset OS


所以说新建一个容器的时候,docker不需要想虚拟机一样重新加一个操作系统的内核,避免引导,


虚拟机是加载 Guest OS 分钟级别的,


而docker是利用主机的操作系统,省略了这个复杂的加载过程,秒级别

14.png

现在的docker是都支持的


不只支持 linux,Mac OS, windows都支持


之后又docker的使用经验之后我们回过头来再看理论,就会理解的很清晰了


常用命令

Docker imeages #查看所有本地的主机上有的镜像

[root@iZwz90ps06ioyada63oiwiZ ~]# docker images
REPOSITORY    TAG       IMAGE ID       CREATED       SIZE
hello-world   latest    feb5d9fea6a5   12 days ago   13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG         镜像的标签
IMAGE ID    镜像的id
CREATED     镜像的创建时间
SIZE        镜像的储存大小
#可选项
-a -all   #列出所有的镜像
-q --quiet  #只显示镜像的id

Docker pull 下载


#下载内容 ,默认的tag 是 latest
#可以按照版本号 ,也可以直接用mysql下载版本
[root@iZwz90ps06ioyada63oiwiZ ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
07aded7c29c6: Already exists  #分段的下载,联合文件系统,不用重复下载,可以共用重复的部分
f68b8cbd22de: Already exists 
30c1754a28c4: Already exists 
1b7cb4d6fe05: Already exists 
79a41dc56b9a: Already exists 
00a75e3842fb: Already exists 
b36a6919c217: Already exists 
5e11fe494f45: Pull complete 
9c7de1f889a7: Pull complete 
cf6a13d05a76: Pull complete 
fc5aa81f393a: Pull complete 
Digest: sha256:360c7488c2b5d112804a74cd272d1070d264eef4812d9a9cc6b8ed68c3546189
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7

15.png


删除命令


docker rmi -f 9f35042c6a98 #根据 镜像id 删除docker镜像

docker rmi -f images id images id images id #批量删除docker镜像

docker rmi -f $(docker images -aq) # 删除全部镜像


我们有了镜像才可以创建容器,以linux为例子,创造一个CentOS的容器


来测试学习


docker pull centos


新建容器并且启动


docker run [可选参数] image
#参数说明
--name = "name" 容器名字, tomcat 1 ,tomcat 2来区分容器
-d              后台的方式运行
-it             使用交互方式运行 ,进入容器查看内容
-p              指定容器的端口 -p 8080:8080
  -p ip :主机端口:容器端口
  -p  主机端口 : 容器端口(常用)
  -p  容器端口
-p               随机指定端口
#测试,并且启动进入容器
[root@iZwz90ps06ioyada63oiwiZ ~]# docker run -it centos /bin/bash
[root@aa1a02ed3f51 /]# ls
bin  etc   lib    lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
#推出容器查看
[root@iZwz90ps06ioyada63oiwiZ /]# ls
bin   dev  home  lib64       media  mynacos  nginxWebdata  patch  project  run   srv  tmp  var
boot  etc  lib   lost+found  mnt    myredis  opt           proc   root     sbin  sys  usr  www


列出所有运行的容器

docker ps
#列出当前正在运行的容器
-a  #列出当前正在运行的容器+带出历史运行过的内容
-n = ? #显示最近创建的容器
-q    #只显示容器的编号
#可以看到我们之前使用的 helloworld 和 centos 容器
[root@iZwz90ps06ioyada63oiwiZ /]#  docker ps -a
CONTAINER ID   IMAGE          COMMAND       CREATED         STATUS                     PORTS     NAMES
aa1a02ed3f51   centos         "/bin/bash"   3 minutes ago   Exited (0) 2 minutes ago             upbeat_matsumoto
0341862ece26   feb5d9fea6a5   "/hello"      8 hours ago     Exited (0) 8 hours ago               clever_jennings

退出容器


exit #直接容器停止并且推出

Ctrl + p + q #容器不停止 推出


删除容器


docker rm 容器id  # 删除指定容器,不能删除正在运行的容器

docker rm -f $(docker ps -aq) #删除所有的容器

docker ps -a|xargs docker rm #也可以删除所有的容器


[root@iZwz90ps06ioyada63oiwiZ /]# docker rm -f $(docker ps -aq)

aa1a02ed3f51

0341862ece26


启动和停止容器


docker start 容器id     #启动容器

docker restart 容器id   #重启容器

docker stop 容器id   #关闭容器

docker kill 容器id   #强制关闭当前的容器


后台启动容器


#命令 docker run -d 镜像!

#问题 docker ps 发现centos停止了

#常见的坑 docker 容器使用后台运行,就必须要有一个前台的进程,docker发现没有前台的应用,就会自动停止

#nginx 容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了



练习 部署 nginx

docker安装nginx


#1, 搜索镜像 search 建议去docker hub 上搜索可以看到详细信息
docker search nginx
#2  拉取镜像 pull 下载镜像
docker pull nginx 
#3  运行测试
#使用参数
#-d 后台运行
# --name 给容器名字
# -p 宿主机端口:容器端口
[root@iZwz90ps06ioyada63oiwiZ ~]# docker ps -a
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
[root@iZwz90ps06ioyada63oiwiZ ~]# docker run -d --name nginx01 -p 3344:80 nginx
30361d53c7276f50adecbef37a56865b9858a0b553efa7f33689c8c9f16d927e
[root@iZwz90ps06ioyada63oiwiZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS                  NAMES
30361d53c727   nginx     "/docker-entrypoint.…"   30 seconds ago   Up 30 seconds   0.0.0.0:3344->80/tcp   nginx01
[root@iZwz90ps06ioyada63oiwiZ ~]# curl localhost:3344
#测试通过,进入查看配置,之后停止容器
[root@iZwz90ps06ioyada63oiwiZ ~]# curl localhost:3344
<!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@iZwz90ps06ioyada63oiwiZ ~]# docker exec -it nginx01 /bin/bash
root@30361d53c727:/# ls
bin  boot  dev  docker-entrypoint.d  docker-entrypoint.sh  etc  home  lib  lib64  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
root@30361d53c727:/# whereis nginx
nginx: /usr/sbin/nginx /usr/lib/nginx /etc/nginx /usr/share/nginx
root@30361d53c727:/# cd /etc/nginx
root@30361d53c727:/etc/nginx# ls
conf.d  fastcgi_params  mime.types  modules  nginx.conf  scgi_params  uwsgi_params
root@30361d53c727:/etc/nginx# exit
exit
[root@iZwz90ps06ioyada63oiwiZ ~]# ls
install.sh
[root@iZwz90ps06ioyada63oiwiZ ~]# docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED         STATUS         PORTS                  NAMES
30361d53c727   nginx     "/docker-entrypoint.…"   7 minutes ago   Up 7 minutes   0.0.0.0:3344->80/tcp   nginx01
[root@iZwz90ps06ioyada63oiwiZ ~]# docker stop 30361d53c727 
30361d53c727

端口暴露的概念

16.png



相关文章
|
12天前
|
人工智能 API 数据安全/隐私保护
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
NextChat 是一个可以在 GitHub 上一键免费部署的私人 ChatGPT 网页应用,支持 GPT3、GPT4 和 Gemini Pro 模型。该项目在 GitHub 上获得了 63.8k 的 star 数。部署简单,只需拉取 Docker 镜像并运行容器,设置 API Key 后即可使用。此外,NextChat 还提供了预设角色的面具功能,方便用户快速创建对话。
77 22
使用 Docker 一键免费部署 63.8k 的私人 ChatGPT 网页应用
|
23天前
|
SQL 关系型数据库 数据库
国产数据实战之docker部署MyWebSQL数据库管理工具
【10月更文挑战第23天】国产数据实战之docker部署MyWebSQL数据库管理工具
72 4
国产数据实战之docker部署MyWebSQL数据库管理工具
|
13天前
|
运维 开发者 Docker
Docker Compose:简化容器化应用的部署与管理
Docker Compose:简化容器化应用的部署与管理
|
13天前
|
Docker 微服务 容器
使用Docker Compose实现微服务架构的快速部署
使用Docker Compose实现微服务架构的快速部署
29 1
|
1月前
|
Web App开发 前端开发 测试技术
【Docker项目实战】使用docker部署tabler后台模版
【10月更文挑战第10天】使用docker部署tabler后台模版
42 1
【Docker项目实战】使用docker部署tabler后台模版
|
1月前
|
JSON JavaScript 测试技术
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
【10月更文挑战第9天】使用Docker部署PPTist在线演示文稿应用
42 1
【Docker项目实战】使用Docker部署PPTist在线演示文稿应用
|
1月前
|
消息中间件 编解码 Docker
【Docker项目实战】Docker部署RabbitMQ消息中间件
【10月更文挑战第8天】Docker部署RabbitMQ消息中间件
93 1
【Docker项目实战】Docker部署RabbitMQ消息中间件
|
1月前
|
存储 前端开发 测试技术
【Docker项目实战】使用Docker部署Calcium网页计算器
【10月更文挑战第7天】使用Docker部署Calcium网页计算器
36 1
【Docker项目实战】使用Docker部署Calcium网页计算器
|
1月前
|
存储 测试技术 Linux
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
【10月更文挑战第4天】使用Docker部署Radicale日历和联系人应用
137 2
【Docker项目实战】使用Docker部署Radicale日历和联系人应用
|
26天前
|
负载均衡 应用服务中间件 nginx
基于Nginx和Consul构建自动发现的Docker服务架构——非常之详细
通过使用Nginx和Consul构建自动发现的Docker服务架构,可以显著提高服务的可用性、扩展性和管理效率。Consul实现了服务的自动注册与发现,而Nginx则通过动态配置实现了高效的反向代理与负载均衡。这种架构非常适合需要高可用性和弹性扩展的分布式系统。
26 4
下一篇
无影云桌面