当前位置: 首页 > news >正文

docker基础入门于应用的实践

docker基础入门于应用的实践

  1. docker基础和基本概念
  2. 安装Docker于加速器
  3. docker中镜像,容器和仓库
  4. docker基础操作命令
  5. Docker数据管理
  6. Docker 的网络于容器互联
  7. 通过docker应用和部署应用系统的流程
  8. 基于docker容器运桌面案例
  9. docker容器下部署zabbix监控案例
  10. docker可视化容器管理工具Portainer

1. docker基础与基本概念

在这里插入图片描述

简单来说,docker理念是打包镜像以及依赖环境到一个可移植的容器中,然后发布到任何的平台的主机上(Linux.windows,macos)上都能运行。

要记住这句话

  1. build,ship,and run 即搭建,发送,运行
  2. build once , run anywhere 一次构建到处运行

2.安装docker和配置加速器

一下命令可以写成一个shell脚本执行

、使用yum在线安装Docker CE,执行以下命令安装依赖包:
[root@localhost ~]# yum install -y yum-utils device-mapper-persistent-data lvm2
执行下面的命令添加yum软件源:
[root@localhost ~]# yum-config-manager --add-repo yum-config-manager --add-repo https://mirrors.aliyun.com/dockerce/linux/centos/docker-ce.repo
最后,可以安装Docker CE了。
[root@localhost ~]# yum makecache fast
[root@localhost ~]# yum install docker-ce
最后,启动 Docker CE:
[root@localhost ~]# systemctl enable docker
[root@localhost ~]# systemctl start docker

安装Docker与加速器配置

[root@docker-110 docker]# ls
daemon.json# 这是我在华为云中添加的加速器
[root@docker-110 docker]# cat daemon.json 
{"registry-mirrors": [ "https://58698f75ac8e4e98bbb253a7e9b31657.mirror.swr.myhuaweicloud.com" ]
}# 最后测试hello-world 
[root@docker-110 docker]# docker run hello-world Hello from Docker!

3.docker 镜像,容器和仓库

在这里插入图片描述

docker镜像

1. 镜像是一层一层的构建起来的
2. 镜像的内容是不可修改的。(只读`)

docker容器

docker 镜像和容器,容器是运行镜像产生的。

docker仓库

即为我们下载镜像的仓库,也可提交为镜像。

4.docker基础命令

docker pull nginx:1.20.2
1.20.2: Pulling from library/nginx
a5a6f2f73cd8: Pull complete 
1a32bfb24a51: Pull complete 
b30849834152: Pull complete 
Digest: sha256:29e21925ac52b4ffb748eabb2438ec06f4b1ce8b5ae92c7c13548907b51a78bd
Status: Downloaded newer image for nginx:1.20.2pull 后面你不加上版本,默认就是最新版本latest

运行镜像

docker run -it --rm centos:7.9.0 bash -t 一个虚拟的终端
-i 一个交互式的容器--rm 退出就删除记录

列出镜像

[root@docker-110 docker]# docker images
REPOSITORY                      TAG        IMAGE ID       CREATED         SIZE
npm-js                          latest     4e16243ce30e   47 hours ago    917MB
flask-redis                     latest     3b2972d5ba4d   3 days ago      627MB
my-flask-redis                  latest     aa7445cb59e4   7 days ago      934MB
t1-flask-redis                  latest     e534ffc23b36   9 days ago      627MB
t1-curl                         latest     74c3e66b78a5   9 days ago      204MB
zabbix/zabbix-web-nginx-mysql   latest     de0134fe026a   2 weeks ago     271MB
zabbix/zabbix-server-mysql      latest     2aa44919a302   2 weeks ago     105MB
zabbix/zabbix-agent             latest     ad17a7804c01   2 weeks ago     20.3MB
redis                           <none>     860da63e75fb   3 weeks ago     128MB
redis                           latest     c09c2832ba40   3 

进入容器

[root@localhost home]# docker exec -it 6960255dc75b bash 1.这里可以用前三个id
2. 也可以用整个id号
3. 也可用容器的名字

5.Docker数据管理

# 我这里一般使用的-v的参数

-v 宿主机目录:容器目录

  1. 如果宿主机映射目录有东西容器就用宿主机目录
  2. 如果宿主机目录没东西,容器的目录就映射到宿主机上。

Volumes方式下:容器内的数据被存放到宿主机(linux)一个特定的目录下

(/var/lib/docker/volumes/)。这个目录只有Docker可以管理,其他进程不能修改。如果想持久保存容

器的应用数据,Volumes是Docker推荐的挂载方式

使用挂载主机目录覆盖规则

  • 如果指定的主机目录为空,同时容器中的非空目录是Dockerfile中使用VOLUME命令声明过的,则容器文件会被复制到宿主机上。
  • 只要宿主机目录不为空,则一定会覆盖容器内的目录

6, Docker的网络与容器互联

外部访问容器

  • 容器中可以运行的网络应用,可以通过 -P 或者 -P
  • -P 会会随机的暴露一个3000以上的端口
  • -p是 80:80 是指定的暴露端口、

容器的互相网络联系

容器之间Docker的使用经验。用–link进行相关联,

--link 后面一定是容器的名字

创建一个docker的网段

[root@docker-110 docker]# docker network create mynet1[root@docker-110 docker]# docker network ls
NETWORK ID     NAME                 DRIVER    SCOPE
8eabaa97d942   bridge               bridge    local
0db7cc002f15   host                 host      local
e5c6866dbfd1   linux0224-net1       bridge    local
b3ca5dd162d9   linux0224-net2       bridge    local
083af13e0742   my-flask-net         bridge    local
8dc381c16de0   mynet1               bridge    local
2038547e0c41   none                 null      local
8fe1487d0872   zabbix-all_default   bridge    local
72ec5c76f541   zabbix_network       bridge    local在运行镜像使用的话是--network 名字

7.通过docker部署应用程序系统

  1. docker容器使用流程

在这里插入图片描述

  1. 在实际环境中,容器,镜像,仓库之间的关系

在这里插入图片描述

8.基于docker的虚拟化云桌面案例

下载云镜像

docker pull swr.cn-north-1.myhuaweicloud.com/iivey/linux-desk:v1.0

命令式安装容器

docker run -itd --shm-size 4G -p 6080:6080 
-e VNC_PASSWD=admin123456 \   
-e GEOMETRY='1366x768' -e DEPTH=32 \    
-v /data3/Downloads:/root/Downloads \
-v /data3/Documents:/root/Documents \
-v /data3/Pictures:/root/Pictures \
-v /data3/Videos:/root/Videos \
-v /data3/Music:/root/Music \
-v /data3/Desktop:/root/Desktop \
--restart unless-stopped \
--name linuxdesk \
swr.cn-north-1.myhuaweicloud.com/iivey/linux-desk:v1.0

基于docker的云桌面就可以运行起来了,然后就可以通过浏览器访问linux云桌面的运行环境,可以进行办公,上网,游戏等等

在这里插入图片描述

9. docker容器下安装zabbix监控

先创建docker的网络

  • 启动zabbix镜像之前,需要创建一个新的Docker网络,后面需要zabbix-server,mysql , web等容器加入到此网络中,方便互相访问。
  1. docker启动mysql容器
docker pull mysql:8.0.23docker run -itd -p 3306:3306 --name zabbix-mysql \
--network zabbix_net \
--restart unless-stopped \
-v /etc/localtime:/etc/localtime \
-v /dockerdata/zabbix/db:/var/lib/mysql \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix123" \
-e MYSQL_ROOT_PASSWORD="root123" \
mysql:8.0.23 \
--default-authentication-plugin=mysql_native_password \
--character-set-server=utf8 \
--collation-server=utf8_bin
  1. 创建一个zabbix-java-gateway镜像
docker run -v /etc/localtime:/etc/localtime \
-dit --restart=always \
--name=zabbix-java-gateway \
--network zabbix_net \
zabbix/zabbix-java-gateway:centos-5.2.4
  1. 运行zabbix-server-mysql 镜像
docker pull zabbix-server-mysql docker run -dit -p 10051:10051 \
--mount source=zabbix-server-vol,target=/etc/zabbix \
-v /etc/localtime:/etc/localtime \
-v /usr/lib/zabbix/alertscripts:/usr/lib/zabbix/alertscripts \
--name=zabbix-server-mysql \
--restart=always \
--network zabbix_net \
-e DB_SERVER_HOST="zabbix-mysql" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix123" \
-e MYSQL_ROOT_PASSWORD="root123" \
-e ZBX_JAVAGATEWAY="zabbix-java-gateway" \
-e ZBX_JAVAGATEWAY_ENABLE="true" \
-e ZBX_JAVAGATEWAYPORT=10052 \
zabbix/zabbix-server-mysqll:centos-
5.2.4

4.运行zabbix-web-nginx-mysql 镜像

docker run -dit -p 8080:8080 \
-v /etc/localtime:/etc/localtime \
-v /data/dockershell/zabbix/fonts/DejaVuSans.ttf:/usr/share/zabbix/assets/fonts/DejaVuSans.ttf \
--name zabbix-web-nginx-mysql \
--restart=always \
--network zabbix_net \
-e DB_SERVER_HOST="zabbix-mysql" \
-e MYSQL_DATABASE="zabbix" \
-e MYSQL_USER="zabbix" \
-e MYSQL_PASSWORD="zabbix123" \
-e MYSQL_ROOT_PASSWORD="root123" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
zabbix/zabbix-web-nginx-mysql:centos-5.2.4

5.运行zabbix-agent 镜像

docker run -dit --name zabbix-agent \
-p 10050:10050 \
--network zabbix_net \
-e ZBX_HOSTNAME="Zabbixserver" \
-e ZBX_SERVER_HOST="zabbix-server-mysql" \
-e ZBX_SERVER_PORT=10051 \
zabbix/zabbix-agent:centos-5.2.4

先给主机配置客户端

在这里插入图片描述

10.docker可视化工具portainer

  1. Portainer介绍

Portainer是一个可视化容器镜像的管理工具,利用Portainer可以轻松的构建,管理和维护Docker环境,它可以与Docker,DockerSwam, K8s 和无服务器环境吗,基于容器化安装,方便搞笑的部署。

官方网址:https://www.portainer.io/

参数的解释

--name  指定容器的名称
-p      容器端口映射到宿主机的端口
-v      将主机目录挂载到容器目录
-d      让容器在后台运行
docker run -d -p 9000:9000 \
--name portainer \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v portainer_data:/data \
swr.cn-north-1.myhuaweicloud.com/iivey/portainer-ce:2.19.1

在这里插入图片描述

最后总结一下

我一般部署的话,一般是不暴露端口用宿主机的nginx反向代理区完成,但是这样会很麻烦。

http://www.lqws.cn/news/457669.html

相关文章:

  • 使用 OpenCV 和传统机器学习实现工业开关状态识别
  • RAG 升级之路:如何让问答机器人真正“智能”起来
  • iOS应用启动时间优化:通过多工具协作提升iOS App性能表现
  • 异常的处理
  • 云计算与5G:如何利用5G网络优化云平台的性能
  • 芋道源码 - 添加反向代理, 通过公网域名访问静态资源图片
  • 【国产AI服务器】全国产PCIE5.0交换板,替代博通89104/89144,支持海光、龙芯等平台
  • 日常运维问题汇总-16
  • 西门子S7通信协议抓包分析应用
  • Tomcat项目本地部署(Servlet为例)
  • 详解Redis的热点key问题
  • linux线程同步
  • Rust 项目文档生成之旅:cargo doc
  • 字符编码(UTF-8,16,32 和GBK和ASCLL码)
  • AI Agent开发与安全
  • 数据结构-顺序表-求基数乘积
  • 《Go语言圣经》类型断言应用:高效类型判断
  • I排序算法.go
  • 如何轻松将照片从 iPhone 传输到 Android?
  • 【八股消消乐】Elasticsearch优化—检索Labubu
  • NumPy玩转数据科学
  • Java 集合框架底层数据结构实现深度解析
  • 高效打印 PDF 文档:基础操作与自动打印(含C# .NET方案)
  • tkinter 的 grid() 布局管理器学习指南
  • Matter协议开发者指南:使用Matter SDK构建智能家居应用
  • 礼让行人:深圳 vs 上海
  • 性能测试-jmeter实战3
  • GitHub Copilot 配置快捷键
  • NestJS中实现动态Cron任务管理
  • 榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台