Docker常用知识
Docker常用知识
###################################################################
# Docker是什么
# 1.是一个开源的应用容器引擎基于Go语言并遵从Apache2.0协议开源
# 2.可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,
# 然后发布到任何流行的Linux机器上,也可以实现虚拟化
# 3.容器是完全沙箱机制,互相之间不会有任何接口(类似iPhone的app)
# 更重要的是容器性能开销极低。
# 4.从17.03版本之后分为CE(Community Edition 社区版)
# 和EE(Enterprise Edition 企业版)
###################################################################
# Docker架构原理
#
# Docker三要素
#
# 1.镜像
# Docker镜像(Image)就是一个只读的模板,它可以是一个可运行软件(tomcat、
# mysql),也可以是一个系统(centos)。镜像可以用来创建Docker容器,一个
# 镜像可以创建很多容器。
#
# 2.容器
# Docker利用容器(Container)独立运行的一个或一组应用.容器是用镜像创建
# 的运行实例.它可以被启动,开始,停止,删除.每个容器都是相互隔离的,保证
# 安全的平台.可以把容器看做是一个简易版的linux环境(包括root用户环境,
# 进程空间,用户空间和网络空间等)和运行在其中的应用程序,容器的定义和
# 镜像几乎一模一样,也是一堆层的统一视角,唯一区别在于容器的最上面那一
# 层是可读可写的。
#
# 3.仓库
# 是集中存放镜像文件的场所,类似GitHub存放代码一样,只不过Docker Hub是
# 由来存镜像(image)的。仓库和仓库注册服务器是有区别的.仓库注册服务器
# 上往往存放着多个仓库,每个仓库又包含了多个镜像,每个镜像有不同的标签.
# 仓库分为公开仓库和私有仓库两种形式
#
# 容器与镜像的关系类似于面向对象编程中的对象与类
# Docker 面向对象
# 容器 对象
###################################################################
# Docker有什么用
#
# 1.简化环境搭建,提高开发生命周期效率
# 2.大大简化运维工作量
# 3.微服务利器
###################################################################
# Docker容器与虚拟机区别
#
# 1.传统的虚拟机架构是:物理机 -> 宿主机操作系统 -> Hypervisor支持 -> 虚拟机操作系统 -> 应用程序
# 2、docker架构是:物理机 -> 宿主机操作系统 -> docker引擎 -> 应用程序
# (这里面会包含镜像操作系统的文件,但是这些只是依赖环境,里面的内核根本就不会启动,/boot目录可以直接删除掉)
#
# Docke容器 虚拟机(VM)
# 操作系统: 与宿主共享OS 宿主机OS上运行宿主机OS
# 存储大小: 镜像小,便于存储与传输 镜像庞大(vmdk等)
# 运行性能: 几乎无额外性能损失 操作系统额外的cpu、内存消耗
# 移植性: 轻便、灵活、适用于Linux 笨重、与虚拟化技术耦合度高
# 硬件亲和性: 面向软件开发者 面向硬件运维者
###################################################################
# Docker安装官方文档
# https://docs.docker.com/install/linux/docker-ce/centos/
###################################################################
# 工具准备
# Centos
# VMWare
#
# FinalSSH
# 官网:http://www.hostbuf.com/
#
# Windows版下载地址:
# http://www.hostbuf.com/downloads/finalshell_install.exe
# Mac版,Linux版安装及教程:
# http://www.hostbuf.com/t/1059.html
###################################################################
# Docker安装步骤
#
# 1.切换到root用户
# 2.Docker要求CentOS 系统的内核版本高于3.10
uname -r
# 3.使用root权限登录,确保yum包更新到最新
yum -y update
# 4.卸载旧版本
yum remove doceker docekr-common docker-selinux docker-engine
# 5.安装需要的软件包,yum-util提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
yum install -y yum-utils device-mapper-persistent-data lvm2
# 6.设置yum源
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 7.安装最新版本的Docker
yum -y install docker-ce doceker-ce-cli containerd.io
# 8.启动Docker并设置开机启动
systemctl start docker
systemctl enable docker
# 9.验证Docker
docker version
# 10.Docker HelloWorld测试,第一次安装是下载,在运行一次能看到welcome
# 10.Docker HelloWorld测试,第一次安装是下载,在运行一次能看到welcome
docker run hello-world
docker run hello-world
###################################################################
# HelloWorld 运行原理
#
# 从左到右client客户端,Docker运行主机,远程仓库
# docker build,pull,run分别是构建,拉取,运行命令,后面再细讲
# 中间Docker主机里有Docker daemon主运行线程,以及Containers容器,容器里可以运行很多实例
# (实例是从右侧Images镜像实例化出来的)Images是存储在本地的镜像文件,比如Redis,Tomcat这些镜像文件
# 右侧是registry镜像仓库,默认远程镜像仓库 https://hub.docker.com/不过是国外主机,下载很慢,不稳定,
###################################################################
# Docker配置阿里云镜像仓库
#
# 查看镜像
docker images
# 下载
docker pull tomcat:8.5.47-jdk8-openjdk
# 配置阿里云镜像仓库
# 1.登录进入阿里云镜像服务中心,获取镜像地址
# 2.在 /etc/docker目录下找到在daemon.json文件(没有就新建),将下面内容写入
{
"registry-mirrors":["你的镜像地址"]
}
# 3.重启
systemctl daemon-reload
systemctl restart docker
# 4.测试
docder info
###################################################################
# Docker 基本命令
#
# 启动Docker
systemctl start docker
# 停止Docker
systemctl stop docker
# 重启Docker
systemctl restart docker
# 开启启动Docker
systemctl enable docker
# 查看Docker概要信息
docker info
# 查看docker帮助文件
docder --help
# 查看Docker版本信息
docker version
###################################################################
# Docker镜像命令
###################################
# 列出本机所有镜像
#
# 可选参数
# -a 显示所有镜像
# -q 只显示镜像ID
# -qa 可以组合
# --digests 显示镜像的摘要信息
# --no-trunc 显示完整的镜像信息
docker images
###################################
# 搜索镜像
#
# 可选参数
# --no-trunc 显示完整的镜像信息
# -s 列出收藏数不小于指定值的镜像
# --automated 只列出Docker Hub自动构建类型的镜像
docker search tomcat
docker search -s 40 tomcat
###################################
# 下载镜像
#
docker pull nginx
###################################
# 删除镜像
#
# 如果不写TAG,默认删除最新版本latest
# 有镜像生成的容器在运行时候,会报错,删除失败
# 我们需要加-f强制删除
docker rmi 镜像名称:[TAG]
# 删除多个
docder rmi -f 镜像名称1:[TAG] 镜像名称2:[TAG]
# 删除全部
docker rmi -f $(docker images -qa)
###################################################################
# Docker容器操作基本命令
###################################
# 创建并启动容器
#
# 可选参数
# -i 以交互模式运行容器,通常与-t同时使用
# -t 为容器重新分配一个伪输入终端,通常与-i同时使用
# docker run -it --name 别名 镜像ID
docker run -it --name mycentos01 67fa590cfclc
###################################
# 列出容器
#
# 可选参数
# -a 显示所有的容器,包括未运行的
# -f 根据条件过滤显示的内容
# -format 指定返回值的模板文件
# -l 显示最近创建的n个容器
# -n 列出最近新建的n个容器
# --no-trunc 不截断输出
# -q 静默模式,只显示容器编号
# -s 显示总的文件大小
docker ps
docker ps -f status=exited
###################################
# 退出容器
#
# 容器停止退出
exit
# 容器不停止退出
ctrl+P+Q
###################################
# 进入容器
#
# docker attach 容器ID or 容器名
docker attach 67fa590cfclc
###################################
# 启动容器
#
# docker start 容器ID or 容器名
docker start 67fa590cfclc
###################################
# 重启容器
#
# docker restart 容器ID or 容器名
docker restart 67fa590cfclc
###################################
# 停止容器
#
# docker stop 容器ID or 容器名
docker stop 67fa590cfclc
# 暴力删除,直接杀掉进程(不推荐)
docker kill 容器ID or 容器名
###################################
# 删除容器
#
docker rm 容器ID
# 强制删除
docker rm -f 容器ID
# 删除多个容器
docker rm -f 容器ID1 容器ID2
# 删除所有容器
docder rm -f $(docker ps -qa)
###################################################################
# Docker容器操作进阶命令
###################################
# 守护方式创建并启动容器
# docder run -di --name 别名 镜像ID
docder run -di --name mycentos01 67fa590cfclc
###################################
# 启动容器,并执行/bin/bash命令(跟上面一样的启动方式,因为默认启动就是/bin/bash)
docder run -di --name mycentos01 67fa590cfclc /bin/bash
###################################
# 进入容器执行命令
# docker exec -it 容器名称 或者 容器ID 执行命令
docker exec -it 67fa590cfclc ls -l /sys
###################################
# 查看容器日志
docker logs 67fa590cfclc
###################################
# 查看容器进程
docker top 67fa590cfclc
###################################
# 宿主机和容器之间文件拷贝
# docker copy 需要拷贝的文件或者目录 容器名称:容器目录
docker cp /home/dog.jpg 67fa590cfclc:/tmp/
# docker copy 容器名称:需要拷贝的文件或者目录 宿主机
docker cp 67fa590cfclc:/tmp/dog.jpg /home/data
###################################################################
# Docker容器宿主机端口映射
#
# 命令
# docker run -it -p 主机(宿主端口):容器端口
docker run -it -p 8888:8080 67fa590cfclc
# 默认端口32768
docker run -it -P 67fa590cfclc
# 有两种访问方式
# 1.通过网页访问
http://192.168.1.3:8888
# 2.命令行访问
curl http://localhost:8888
###################################################################
# Docker commit提交运行时容器成为镜像
################################
# 1.运行容器
docker images
docker run -it --name mytomcatcc -p 8888:8080 67fa590cfclc
################
# 2.进入容器
docker ps
docker exec -it 67fa590cfclc /bin/bash
ls
cd webapps
cd ROOT
ls
vi index.jsp
rm -rf tomcat.png
##################
# 3.提交成为镜像(在外部执行)
docker commit -a='feng cao' -m 'tomcat without logo' 67fa590cfclc java1234/tomcat7:1.2
docker images
################
# 4.进入新的镜像
docker run -it --name mytomcatdd -p 9999:8080 67fa590cfclc
################
# 5.通过网页访问
http://192.168.1.3:8888
###################################################################
# Docker 推送镜像到hub服务器
################################
# 1.https://hub.docker.com/ 注册下得到docker id和密码
################################
# 2.我们用docker login登录hub服务器
docker login
################################
# 3.推送
docker push java1234/tomcat7:1.1
###################################################################
# Docker 推送镜像到阿里云
################################
# 1.进入 https//cr.console.aliyun.com 阿里云镜像控制台,需要注册,用户名就是你的淘宝或者支付宝账号名称,镜像控制台密码单独设置
# 2.进入控制台,我们先创建命名空间,再创建镜像
# 3.阿里云有详细的操作说明
################################
# 1.查看
docker images
################################
# 2.登录
docker login --username=hi50030383@aliyun.com registry.cn-hangzhou.aliyun.com
################################
# 3.打好一个引用
docker tag 67fa590cfclc registry.cn-hangzhou.aliyun.com/java1234/tomcat:1.2.1
docker images
################################
# 4.推送
docker push registry.cn-hangzhou.aliyun.com/java1234/tomcat:1.2.1
################################
# 5.拉取
docker pull registry.cn-hangzhou.aliyun.com/java1234/tomcat:1.2.1
################################
# 6.运行
docker run -it --name mytomcat8989 -p 8888:8080 67fa590cfclc
###################################################################
# Docker容器目录挂载
#################################
# 1.简介: 我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以实现宿主机和容器目录的双向自动同步
#################################
# 2.语法: docker run -it -v /宿主机目录:/容器目录 镜像名
#################################
# 3.多目录挂载: docker run -it -v /宿主机目录:/容器目录 -v /宿主机目录2:/容器目录2 镜像名
#################################
# 4.注意:
# 如果你同步的是多级目录,可能会出现权限不足的提示
# 这是因为Centos7中的安全模块selinux把权限禁掉了,我们需要添加 --privileged=true 来解决挂载的目录没有权限的问题
#################################
# 5.挂载目录只读
# docker run -it -v /宿主机目录:/容器目录:ro 镜像名
#################################
# 6.操作
# 1.宿主机创建目录hData
# 2.启动
docker run -it -v /home/hData:/cData 67fa590cfclc
# 3.进入容器目录cData
# 4.拷贝文件到hData并修改文件内容,测试是否已经目录映射
# 5.宿主机创建目录hData2
# 6.启动多目录
docker run -it -v /home/hData:/cData -v /home/hData2:/cData2 67fa590cfclc
# 7.拷贝文件到目录hData和hData2并修改文件内容,测试是否已经目录映射
# 8.挂载目录只读
docker run -it -v /home/hData:/cData -v /home/hData2:/cData2:ro 67fa590cfclc
# 9.进入目录hData2并修改里面文件内容,测试是否文件只读
######################################################################################################################################
# 简单web测试项目准备
# 1.一个连接数据库操作的小项目
# 2.在docker搞一个tomcat容器,以及mysql容器
##################################################################
# 1.在docker上安装tomcat7和配置
#################################
# 第一步:运行容器
docker run -d -p 8080:8080 67fa590cfclc
docker exec -it 67fa590cfclc /bin/bash
cd /usr/local/tomcat
ls
cd conf
ls
cd ../
cd webapps/
ls
#################################
# 第二步:宿主机里home目录下新建tomcat目录,复制容器里conf,webapps到宿主机
docker cp 67fa590cfclc:/user/local/tomcat/conf /home/tomcat/
docker cp 67fa590cfclc:/user/local/tomcat/webapps /home/tomcat/
#################################
# 第三步:把容器里的tomcat里的webapp、logs、conf挂载到宿主机tomcat目录下,方便上传代码,同步持久化日志,以及方便配置tomcat;关掉容器,启动容器
docker run -d --name tomcat7777 -p 80:8080 -v
/home/tomcat/conf/:/usr/local/tomcat/conf/ -v
/home/tomcat/webapps/:/usr/local/tomcat/webapps/ -v
/home/tomcat/logs/:/usr/local/tomcat/logs/ 67fa590cfclc
#################################
# 第四步:配置tomcat server.xml以及同步上传war包
<Context path="" docBase="/usr/local/tomcat/webapps/WebTest" debug="0" reloadable="true" />
#################################
# 第五步:重启Docker
docker stop 67fa590cfclc
posted on 2020-03-28 19:55 herisson_pan 阅读(13) 评论(0) 收藏 举报
浙公网安备 33010602011771号