虚拟化容器技术之Docker学习(一)虚拟化容器技术之Docker学习一

网友投稿 212 2022-10-22

虚拟化容器技术之Docker学习(一)虚拟化容器技术之Docker学习一

​目录​

​​一、Docker介绍​​

​​二、Docker原理​​

​​三、Docker场景​​

​​四、Docker安装​​

​​五、Docker配置​​

​​六、Docker命令​​

​​七、Docker实战​​

​​八、Docker可视化​​

​​九、Docker容器配置​​

​​十、Docker卸载​​

一、Docker介绍

​1、Docker介绍​

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

Docker是一个开源的应用容器引擎,开发者可以打包他们的应用及依赖到一个可移植的容器中,发布到流行的Linux机器上,也可实现虚拟化。

k8s是一个开源的容器集群管理系统,可以实现容器集群的自动化部署、自动扩缩容、维护等功能。

​2、友情链接​

​​前言 - Docker —— 从入门到实践​​

​​Docker中文文档 Docker概述-DockerInfo​​

​​Docker 教程 | 菜鸟教程​​

​​???? Docker 简介和安装 - Docker 快速入门​​

​​Windows 中配置 Docker | Microsoft Docs​​

​​Docker CE 镜像源站-阿里云开发者社区​​

​​Install Docker Desktop on Windows | Docker Documentation​​

​​README - 《docker官方文档(v1.6)中文翻译》 - 书栈网 · BookStack​​

​​docker swarm ca - [ Docker 17 中文开发手册 ] - 在线原生手册 - php中文网​​

​​Docker Hub​​

​​Get Started with Docker | Docker​​

​​Docker Documentation | Docker Documentation​​

二、Docker原理

Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器

。Docker 容器通过 Docker 镜像来创建。容器与镜像的关系类似于面向对象编程中的对象与类。

一个完整的Docker有以下几个部分组成:

DockerClient客户端Docker Daemon守护进程Docker Image镜像DockerContainer容器

Docker技术的三大核心概念

镜像(Image)容器(Container)仓库(Repository)

Docker容器的五大隔离

pid:进程隔离net:网络隔离 (独有的ip地址,网关,子网掩码)ipc:进程间交互隔离mnt:文件系统隔离uts:主机和域名隔离 (hostname,domainname)container 有自己的机器名

三、Docker场景

1. 本地依赖(Local Dependency)2. 搭建环境(Build Environment)3. 微服务(Microservices)4. 自动测试(Automated testing)5. 部署过程(Deployment process)6. 持续部署(Continuous Deployment)7. 多租户环境(Multi-tenancy)8. 一台机器的多个APP(Multiple apps from one machine)9. 扩容 QPS(Scaling QPS)

四、Docker安装

Docker安装:​​Get Docker | Docker Documentation​​

Docker下载: ​​Install Docker Desktop on Windows | Docker Documentation​​

​1、Win10安装Ubuntu子系统​

​2、 卸载旧版本​

apt-get remove docker docker-engine docker.io containerd runc docker-compose

​3、设置存储库​

apt-get update

apt-get install \ ca-certificates \ curl \ gnupg \ lsb-release

​ 4、添加Docker的官方GPG密钥​

curl -fsSL | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

​5、设置稳定储存库​

echo \ "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \ $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

apt-get update

​6、列出系统可用的docker版本​

apt-cache madison docker-ce

将最新的版本号赋值给VERSION_STRING变量

VERSION_STRING=`apt-cache madison docker-ce | head -1 | awk '{print $3}'`

或者最新版本的次版本(稳定版本)赋值给VERSION_STRING变量

VERSION_STRING=`apt-cache madison docker-ce | sed -n '2,2p' | awk '{print $3}'`

安装当前系统可用的最新版本

apt-get install docker-ce=$VERSION_STRING docker-ce-cli=$VERSION_STRING containerd.io

或者直接默认安装Docker Engine

apt-get install docker-ce docker-ce-cli containerd.io docker-compose

五、Docker配置

​1、开机自启设置​

systemctl enable docker

​2、启动docker服务​

service docker start

​3、 查看docker状态​

service docker status

​4、时间同步配置​

echo '# Generated by NetworkManagernameserver 8.8.8.8nameserver 114.114.114.114' >> /etc/resolv.conf

cat /etc/resolv.conf

apt -y install ntp

chkconfig ntpd on

systemctl is-enabled ntpd

ntpdate -u ntp.aliyun.com

​5、配置docker仓库源​

sudo tee /etc/docker/daemon.json <<-'EOF'{ "registry-mirrors": [ " " " " " " " " " " ]}EOF

cat /etc/docker/daemon.json

service docker restart

docker info

注意:在Windows里面用WSL使用Ubuntu,系统有SysV但是没有systemd,如遇到systemd命令按照以下命令等价使用就行了

或者使用apt命令直接安装(有风险)

apt install systemctl

mv /etc/apt/apt.conf.d/20snapd.conf /etc/apt/apt.conf.d/20snapd.conf.bak

执行docker hello-world 界面

docker run hello-world

​5、下载Docker on Windows​

如果自带的Ubuntu不能正常启动docker,可以在win10中下载安装再配置docker地址

Docker on Windows下载:​​Install Docker Desktop on Windows | Docker Documentation​​

Docker安装中文指南:​​Installation on Windows | Docker 中文指南​​

docker加速镜像列表

中国区:​​- 欢迎登录阿里云,安全稳定的云计算服务平台​​

{ "builder": { "gc": { "defaultKeepStorage": "20GB", "enabled": true } }, "experimental": false, "features": { "buildkit": true }, "registry-mirrors": [ " " " " " " " " " " ]}

​7、Docker on windows中启用TLS​

win10的docker配置文件在 C:\Users\com\.docker 目录下(com是用户名称)

Docker Desktop的默认安装路径在:C:\Program Files\Docker\Docker

​8、配置docker​

echo "export DOCKER_HOST='tcp://0.0.0.0:2375'" >> /etc/profile

source /etc/profile

docker version

docker info

六、Docker命令

Docker命令文档:​​Docker run reference | Docker Documentation​​

列出所有镜像:docker images

搜索镜像:docker search 镜像

下载镜像:docker pull 镜像id:targe

删除镜像:docker rmi -f 镜像id 镜像id 镜像id

批量删除:docker rmi -f ${docker images -aq}

启动镜像: docker run [可选参数] image

--name="xxx"  给容器起名-d  后台方式运行-it  使用交互式方式运行,进入容器内部-p  指定容器端口,通常用 -p ip:主机端口:容器端口-P  随机指定端口

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

-a 列出正在运行和历史运行的容器-n=? 显示最近创建的容器-q 只显示容器的编号

启动容器:docker start 容器id

停止容器:docker stop 容器id

强制停止容器:docker kill 容器id

重启容器:docker restart 容器id

暂停容器:docker pause 容器id

取消暂停容器:docker unpause 容器id

删除容器:docker rm 容器id

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

删除所有容器:docker ps -aq | xargs docker rm -f

制作镜像:docker commit -m="描述信息" -a="作者" 容器id 目标镜像名:[TAG]

启动一个远程Shell:docker run -it centos /bin/bash

拷贝容器文件到主机:docker cp 容器id:容器文件 主机目录

构造日志:docker run -d centos /bin/bash -c 'echo date; echo date; echo date'

查看日志:docker logs -ft --tail ? 容器id

查看容器端口:docker container port 容器id/容器名

查看容器占用资源:docker stats

查看容器的进程:docker top 容器id/容器名

查看进行元数据:docker inspect 容器id

查看数据卷:docker volume ls

查看数据卷信息:docker volume inspect 数据卷名

查看容器ip地址:docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器id/容器名

查看容器ip地址:docker inspect 容器id/容器名 | grep '"IPAddress":' | head -n 1 | awk '{ print $2}' | awk -F '"' '{print $2}'

进入运行的容器:docker exec -it 容器id /bin/bash(开辟新进程)

进入运行的容器:docker attach -it 容器id /bin/bash(进入原有进程)

退出容器不关闭容器:  Ctrl + P + Q

退出容器并关闭容器:  exit

注意:docker容器后台运行之后如果没有提供服务,docker会自动关闭该容器

七、Docker实战

​1、docker安装centos7​

docker search centos

docker pull centos:7

docker run -d --name=centos7-01 centos:7

docker exec -it centos7-01 /bin/bash

echo $PATHexit

docker stop centos7-01

​2、docker安装tomcat​

docker search tomcat

docker pull tomcat:9.0

docker run -d --name=tomcat9.0-01 -p 8081:8080 tomcat:9.0

docker exec -it tomcat9.0-01 /bin/bash

cp -r /usr/local/tomcat/webapps.dist/* /usr/local/tomcat/webapps/

docker stop tomcat9.0-01

​​search nginx

docker pull nginx:1.20

docker run -d --name=nginx1.20-01 -p 81:80 nginx:1.20

curl 127.0.0.1:81

docker exec -it nginx1.20-01 /bin/bash

whereis nginx

docker stop nginx1.20-01

​​search mysql

docker pull mysql:5.7

--provileged=true表示赋予特权 -v 主机目录:容器目录

docker run -d --name=mysql5.7-01 -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ --privileged=true \ -v /home/mysql/mysql5.7-01/etc/mysql:/etc/mysql \ -v /home/mysql/mysql5.7-01/data:/var/lib/mysql \ mysql:5.7

如果docker安装在windows,也可以挂载,比如把/etc/mysql目录挂载到win10 G:\Hadoop\Docker\MySQL\etc\mysql 目录下,命令如下

docker run -d --name=mysql5.7-01 -p 3307:3306 \ -e MYSQL_ROOT_PASSWORD=123456 \ --privileged=true \ -v G:/Hadoop/Docker/MySQL/etc/mysql:/etc/mysql \ -v G:/Hadoop/Docker/MySQL/data:/var/lib/mysql \ mysql:5.7

docker exec -it mysql5.7-01 /bin/bash

whereis mysql

ls /etc/mysql

查看docker数据卷

docker volume ls

查看卷的具体信息

docker volume inspect

​5、docker安装elasticsearch​

​​Docker Hub​​

docker search elasticsearch

docker network create elknetwork

docker run -d --name elasticsearch7.16.2-01 --net elknetwork -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" elasticsearch:7.16.2

​​stats

docker如果不限制内存运行elasticsearch,elasticsearch将消耗当前70%以上的内存,通过-e参数设置elasticsearch

docker run -d --name elasticsearch7.16.2-01 \ --net elknetwork -p 9200:9200 -p 9300:9300 \ -e "discovery.type=single-node" \ -e ES_JAVA_OPTS="-Xmx2G -Xms512M" \ elasticsearch:7.16.2

docker logs -ft --tail 60 881ffaa96db2

docker exec -it elasticsearch7.16.2-01 /bin/bash

ElasticSearch集群安装:​​Install Elasticsearch with Docker | Elasticsearch Guide [7.5] | Elastic​​

​5、DIY docker镜像​

这里要复制当前一个tomcat容器作为docker的初始镜像,先查看tomcat镜像id

docker ps -a

docker images

-a:提交作者   -m:镜像信息   8e4690273e66:被拷贝的容器id  tomcat9.0:镜像名称  v1:tag

docker commit -a "root" -m "mini visual tomcat" 8e4690273e66 tomcat9.0:v1

docker images

再次查看镜像可以看到,已经成功将容器制作成docker镜像

​八、Docker可视化​

查看并下载portainer组件

docker search portainer

docker pull portainer/portainer

Linux系统使用以下命令运行

docker run -d -p 9000:9000 \ --restart=always -v /var/run/docker.sock:/var/run/docker.sock \ --privileged=true --name=portainer-01 portainer/portainer

Windows系统使用以下命令运行

docker run -d -p 9000:9000 \ --restart=always -v \\.\pipe\docker_engine:\\.\pipe\docker_engine \ --privileged=true --name=portainer-01 portainer/portainer

​​12345678

portainer首页

portainer仪表板

docker模板

docker容器列表

docker镜像列表

​九、Docker容器配置​

docker容器配置有很多,比如端口映射、文件挂载、网络ip等。这里演示修改端口映射案例

docker修改容器端口映射有两种方式

打成镜像再通过run -p命令重新添加修改docker容器的配置文件实现

这里只演示通过配置文件修改的方式修改容器端口映射

​1、停止修改的容器​

docker stop portainer-01

​2、修改hostconfig.json文件​

​​JSON在线解析及格式化验证 - JSON.cn​​

文件路径: /var/lib/docker/containers/容器id/hostconfig.json

找到文件后,搜索 PortBindings,找到映射关系,这里添加一个 9001的端口映射

容器内部端口:"9001/tcp" "9000/tcp" ,主机映射端口:"HostPort":"9001" "HostPort":"9000"

"PortBindings":{ "9001/tcp":[ { "HostIp":"", "HostPort":"9001" } ], "9000/tcp":[ { "HostIp":"", "HostPort":"9000" } ] },

​3、修改config.v2.json文件​

文件路径: /var/lib/docker/containers/容器id/config.v2.json

(1)搜索 ExposedPorts,添加一个9001端口

"ExposedPorts":{ "9001/tcp":{}, "9000/tcp":{} },

(2)搜索 NetworkSettings,在下边的ports标签中添加9001端口

"Ports":{ "9001/tcp":[ { "HostIp":"", "HostPort":"9001" } ], "9000/tcp":[ { "HostIp":"", "HostPort":"9000" } ] },

​3、重启修改端口的容器​

docker start portainer-01

十、Docker卸载

​1、删除docker安装包​

apt-get purge docker-ce

​2、删除docker配置、容器​

rm -rf /var/lib/docker /var/lib/containerd

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java十分钟精通内部类的使用
下一篇:【RocketMQ】通过 Docker 快速搭建 RocketMQ 环境,超简单!!(文末有福利)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~