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.2

pull 后面你不加上版本,默认就是最新版本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.23

    docker 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

  2. 创建一个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

  3. 运行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反向代理区完成,但是这样会很麻烦。

相关推荐
家庭云计算专家1 小时前
ONLYOFFICE 协作空间 企业版使用秘籍-5.企业电子文件如何管理?便于查找、访问和协作,轻松提升效率
大数据·运维·人工智能·onlyoffice·协作空间·onlyoffice开发版
easyboot2 小时前
openssl创建证书解决不安全问题
运维·服务器·安全
别骂我h2 小时前
容器技术技术入门与Docker环境部署
java·spring cloud·docker
showyoui2 小时前
Dockerfile 最佳实践
容器
shumeigang2 小时前
LVS+Keepalived+nginx
运维·nginx·lvs
最不会程序的程序猿2 小时前
docker执行yum报错Could not resolve host: mirrorlist.centos.org
docker·容器·centos
蚊子不吸吸2 小时前
在Docker、KVM、K8S常见主要命令以及在Centos7.9中部署的关键步骤学习备存
linux·学习·docker·kubernetes·centos·k8s·kvm
萌新小码农‍3 小时前
Docker简单介绍与使用以及下载对应镜像(项目前置)
docker·容器·eureka
运维小贺3 小时前
华为和H3C服务器配置远控管理地址
运维·服务器·华为
三维频道3 小时前
汽车前纵梁焊接总成与冲压件的高效自动化三维检测方案
运维·自动化·汽车·自动化三维检测·汽车前纵梁焊接总成·冲压件检测·高精度检测技术