重学Docker

转了云方向,代码都少写了



1. 为什么出现Docker

以前开发项目有开发的环境、测试的环境、还有生产的环境,每经过一阶段就要迁移项目。不同的环境有不同的配置,可能导致不可预估的错误,运维要经常性的改动


世界陷入了混乱,于是上帝说,让Docker来吧,于是一切光明。Dokcer 把初始的环境一模一样地复制过来,那么就消除了协作编码时,我的机器能运行,而其他机器不能运行的困境


Docker是基于Go语言的开源项目,Docker可实现应用层的隔离,共享宿主机内核、而虚拟机是隔离系统,连内核,硬件都是各自模拟的





2. Docker的结构

重学Docker

Docker_Host (宿主机):安装了Docker程序的主机,形式为一个守护进程

Client (客户端):连接docker主机进行操作(与守护进程通信)

Registry (仓库):保存各种打包好的镜像(类似Github)

Images (镜像):软件打包好的镜像,放进仓库中(笔者理解为类,可以派生对象)

Containers (容器):镜像启动后的实例成为容器(笔者理解按照类创建的对象)





3. 卸载、安装
3.1 卸载 # 卸载旧版本 $ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engin # 卸载新版本 $ sudo rm -rf /var/lib/docker $ sudo rm -rf /var/lib/containerd $ yum remove docker-ce docker-ce-cli containerd.io

主机上的镜像、容器、卷、自定义配置是不会自动删除的需要手动



3.2 配置Docker库 $ yum install -y yum-utils $ yum-config-manager \ --add-repo \ https://download.docker.com/linux/centos/docker-ce.repo

安装yum工具包,里面包含yum-config-manager,用来设置yum配置

首次安装Docker需在yum中设置的Docker存储库,之后就可从Docker存储库中安装和更新



3.3 安装 $ yum install docker-ce docker-ce-cli containerd.io

docker-ce引擎(社区免费版)、cli(可远程连接守护进程)、containerd(提供容器管理服务)



3.4 启动 $ systemctl start docker $ systemctl enable docker $ docker version # 查看版本

3.5 设置镜像加速 $ vim /etc/docker/daemon.json # 去阿里云开发平台查看自己的仓库地址 { "registry-mirrors": ["https://XXXXXXXX.mirror.aliyuncs.com"] } $ systemctl daemon-reload $ systemctl restart docker

梯@@子 加速你懂的 —_—





4. 启动案例

下面举几个例子,现在看不懂没关系,看看使用Docker有多快速


4.1 Hello-World # 输入命令并执行 $ docker run hello-world

重学Docker

阅读运行之后的说明,里面有步骤与相关信息,对理解其原理有很大的帮助



4.2 启动Tomcat

以前运行Tomcat,要安装设置启动jdk、tomcat,期间还需到weget、tar等命令

现在使用了Docker,只需几个命令

# 拉取镜像,不加后面的标签默认拉取最新版 $ docker pull tomcat # 启动容器 $ docker run -d -p 8080:8080 --name mytomcat -v /root/aria2-downloads:/usr/local/tomcat/webapps tomcat # 访问 # 访问结果是404,因为镜像的webapps空的,意思是没有html页面给我们访问 # 其实最新的镜像将wepapps改名为webapps.dist,那么我们只需复制内容过去就可 # 不怕有解决方法,还是按着下面步骤输入: $ docker exec -it mytomcat /bin/bash $ cp -r webapps.dist/* webapps $ exit # 再次访问即可

4.3 启动MySQL

去Docker官网搜索MySQL,跟着其步骤走 MySQL的Docker地址,下面的密码设置官网也都有详细介绍

因为使用Navicat连接时会发生身份验证器错误,所以我们得进去容器修改验证器插件

# 启动并设置密码 $ docker run -d -p 3306:3306 --name howlmysql -e MYSQL_ROOT_PASSWORD=123456 mysql # 进入容器内部 docker exec -it containerId /bin/bash # 登录容器内的MySQL mysql -uroot -p 123456 # 修改身份验证插件 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456'; # 刷新权限 flush privileges;

4.4 启动Aria2

一个基于命令行的下载工具

# Aria2本体 $ docker run -d \ --name aria2-pro \ --restart unless-stopped \ --log-opt max-size=1m \ -e PUID=$UID \ -e PGID=$GID \ -e UMASK_SET=022 \ -e RPC_SECRET=<secret> \ -e RPC_PORT=6800 \ -p 6800:6800 \ -e LISTEN_PORT=6888 \ -p 6888:6888 \ -p 6888:6888/udp \ -v $PWD/aria2-config:/config \ -v $PWD/aria2-downloads:/downloads \ p3terx/aria2-pro # Web界面 $ docker run -d \ --name ariang \ --log-opt max-size=1m \ --restart unless-stopped \ -p 6880:6880 \ p3terx/ariang



5. 常用命令
5.1 帮助命令 $ docker version $ docker info # 更详细信息,客户端,服务器运行状况 $ docker [命令] --help # 帮助命令

5.2 镜像命令 $ docker pull name[:tag] # 拉镜像 $ docker rmi name|id # 删镜像 $ docker images # 列出本地镜像 $ docker search # 官网查找镜像

5.3 容器命令 # 新建并启动容器 $ docker run [可选参数] image --name # 重命名 -d # 守护容器后台 -p # 端口映射 -v # 文件挂载 -i # 交互模式 -t # 分配一个伪终端,后面跟分配的终端 /bin/bash -e # 环境配置 --rm # 用完就删包括卷,测试用(docker run --rm -it -p 80:80 nginx) --restart=always # docker重启,容器也会跟着启动 # 列出正在运行的容器 $ docker ps [可选参数] -a # 显示包括未运行的 -l # 显示最近创建的容器 -n # 显示最近创建的n个容器 -q # 只显示id # 生命周期命令 $ docker start name|id $ docker restart $ docker stop $ docker kill $ docker rm [-f] # 强制删除运行中的容器 # 容器交互命令 $ docker exec # 在运行的容器里执行命令 $ docker exec -it id /bin/bash # 进入容器开一个新的终端,exit后不会停止容器运行 $ docker attach id # 进入正在执行的终端 $ ctrl + P + Q # 交互中容器不停止退出 $ docker exit # 交互中停止容器并退出 # 快捷操作 $ docker container prune 删除所有容器 $ docker rmi $(docker images -q) 删除所有镜像 $ docker rm $(docker ps -aq)

5.4 其他命令 $ docker logs id # 查看容器的日志 $ docker top id # 查看容器里运行的进程 $ docker inspect id # 查看镜像详细信息(层、挂载目录) $ docker cp id:容器路径 宿主机路径 # 拷贝容器文件到宿主机 $ docker cp 宿主机路径 id:容器路径 # 拷贝宿主机文件到容器 $ docker volume create|inspect|ls|prue|rm # 数据卷操作 $ docker build id # 由dockerfile生成镜像 $ docker history id # 查看镜像如何构建 $ docker save id # 备份镜像成.tar文件 $ docker load id # 加载备份镜像.tar文件,建议上传仓库



6. Dockers和虚拟机的区别
6.1 虚拟机

模拟出完整的计算机系统(Guest OS),模拟的系统都是完全隔离的,且运行在监视器(Hypervisor)中,这个监视器是软件、硬件或固件

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzspdj.html