虚拟化容器技术之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 快速入门

https://www.bookstack.cn/read/dockerdocs/README.md

https://www.php.cn/manual/view/36128.html

在 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有以下几个部分组成:

  1. DockerClient客户端
  2. Docker Daemon守护进程
  3. Docker Image镜像
  4. DockerContainer容器

Docker技术的三大核心概念

  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)

Docker容器的五大隔离

  1. pid:进程隔离
  2. net:网络隔离 (独有的ip地址,网关,子网掩码)
  3. ipc:进程间交互隔离
  4. mnt:文件系统隔离
  5. 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子系统

https://blog.csdn.net/qq262593421/article/details/119184327

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 https://download.docker.com/linux/ubuntu/gpg | 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] https://download.docker.com/linux/ubuntu \
  $(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 NetworkManager
nameserver 8.8.8.8
nameserver 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": [
    "https://6nc8ocan.mirror.aliyuncs.com",
    "https://mirror.baidubce.com",
    "https://mirrors.css.tencentyun.com",
    "http://hub-mirror.c.163.com",
    "http://f1361db2.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://reg-mirror.qiniu.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "https://dockerhub.azk8s.cn"
  ]
}
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加速镜像列表 

6、Docker镜像加速器配置

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

{
  "builder": {
    "gc": {
      "defaultKeepStorage": "20GB",
      "enabled": true
    }
  },
  "experimental": false,
  "features": {
    "buildkit": true
  },
  "registry-mirrors": [
    "https://6nc8ocan.mirror.aliyuncs.com",
    "https://mirror.baidubce.com",
    "https://mirrors.css.tencentyun.com",
    "http://hub-mirror.c.163.com",
    "http://f1361db2.m.daocloud.io",
    "https://docker.mirrors.ustc.edu.cn",
    "https://reg-mirror.qiniu.com",
    "https://docker.mirrors.ustc.edu.cn",
    "https://registry.docker-cn.com",
    "https://dockerhub.azk8s.cn"
  ]
}

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 $PATH
exit
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

  http://127.0.0.1:8081/

3、docker安装nginx

docker 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

  http://127.0.0.1:81/ 

4、docker安装mysql

docker 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 <VOLUME NAME>

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

http://127.0.0.1:9200/

docker 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 

6、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

http://127.0.0.1:9000/#/init/admin  admin 12345678

选择local模式,点击connect 

 

 portainer首页

 

portainer仪表板

docker模板 

docker容器列表 

docker镜像列表 

九、Docker容器配置

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

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

  1. 打成镜像再通过run -p命令重新添加 
  2. 修改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

虚拟化容器技术之Docker学习一:https://blog.csdn.net/qq262593421/article/details/122136270

虚拟化容器技术之Docker学习二:https://blog.csdn.net/qq262593421/article/details/122186880

评论 8 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页

打赏作者

日月星辰TEL

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值