docker基础入门于应用的实践
- docker基础和基本概念
- 安装Docker于加速器
- docker中镜像,容器和仓库
- docker基础操作命令
- Docker数据管理
- Docker 的网络于容器互联
- 通过docker应用和部署应用系统的流程
- 基于docker容器运桌面案例
- docker容器下部署zabbix监控案例
- docker可视化容器管理工具Portainer
1. docker基础与基本概念
简单来说,docker理念是打包镜像以及依赖环境到一个可移植的容器中,然后发布到任何的平台的主机上(Linux.windows,macos)上都能运行。
要记住这句话
build,ship,and run 即搭建,发送,运行
- 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 宿主机目录:容器目录
- 如果宿主机映射目录有东西容器就用宿主机目录
- 如果宿主机目录没东西,容器的目录就映射到宿主机上。
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部署应用程序系统
- docker容器使用流程
- 在实际环境中,容器,镜像,仓库之间的关系
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等容器加入到此网络中,方便互相访问。
- 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
- 创建一个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
- 运行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
- 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反向代理区完成,但是这样会很麻烦。