docker入门

  • 简介

client即是本机安装的docker,相当于git
Docker_host相当于centos系统
registry则是docker仓库,相当于GitHub
镜像用于创建docker容器,一个镜像可以创建多个docker容器
容器是由镜像创建的运行实例,(镜像相当于类,容器相当于类创建的对象),容器相当于是简易的Linux系统,个人理解:容器是一个虚拟机,可在容器中安装各种软件或Linux系统,一个容器中跑一个软件或一个Linux系统,这样就能创建多个容器实例
仓库是集中存放镜像文件的场所
  • 安装docker,centos版本需高于6.5

  • centos系统内核需高于2.6.32-431

  • 安装docker步骤

# 安装依赖包
yum install -y yum-utils device-mapper-persistent-data lvm2
# 安装docker
sudo yum install docker-ce
# 启动docker
sudo systemctl start docker
# 重启
sudo service docker restart
# 查看运行中的docker
ps -aux | grep dockerd
# 查看版本
docker -v
# 设置为开机启动
systemctl enable docker
# 查看是否设置为开机启动
systemctl list-unit-files | grep docker
  • 配置阿里云加速器
打开阿里云镜像服务 --> 镜像镜像器

cd /etc/docker                        # 进入当前目录

vim daemon.json               # 创建并编辑该文件

{ "registry-mirrors": ["https://ubjbax4m.mirror.aliyuncs.com"] }                   # 复制到该文件并保存

sudo systemctl daemon-reload                

sudo systemctl restart docker                        # 重启docker

  • 帮助命令
docker version     # docker版本
docker info        # docker信息
docker --help     # docker帮助信息
  • 镜像命令:切换root权限
docker images      # 列出本机上的镜像
-a     # 列出所有
-q    # 显示镜像id
--digests    # 显示摘要信息
--no-trunc   # 显示完整信息

docker search   [options]  <镜像名称>       # 检索镜像
options说明:
--no-trun            # 显示完整的镜像描述
-s                    # 列出收藏数不小于指定值的镜像
--automated               # 只列出 automated build类型的镜像

docker pull  <镜像名称>[:tag]        ## 下载镜像,并指定版本;不指定则是最新版
docker rmi -f  镜像id或名称          # 删除镜像
docker rmi -f 镜像名:tag 镜像名2:tag     # 删除多个指定版本的镜像
docker rmi -f $(docker images -qa)          # 删除本地所有镜像
  • 容器命令
docker run [options]  <要运行的镜像>               # 创建容器并启动
options说明:
--name="容器新名字"                 # 为容器指定一个名称
-d                  # 后台运行容器,并返回容器ID, 也即启动守护式容器
-i              #以交互模式运行容器,通常与-t同时使用
-t                # 为容器重新分配一个伪输入终端,通常与-i同时使用
-P             # 随机端口映射
-p           # 指定端口映射,有以下四种格式
ip:hostPort:containerPort
ip::containerPort
hostPort:containerPort
containerPort

docker pull centos      # 例如先下载一个centos镜像,因为容器就相当于虚拟机,在虚拟机中跑centos系统
序号1列出所有镜像
序号2启动docker镜像
序号3处的[root@4d56fa33ac08]表示现在处于docker中的centos容器中
序号4查看进程,验证是否处于docker的centos容器中

docker ps [options]           # 列出当前正在运行的容器
OPTIONS说明
-a                  # 列出当前所有正在运行的容器+历史上运行过的
-l                  # 显示最近创建的容器
-n                 # 显示最近n个创建的容器,例如docker ps -n 2  表示最近创建的前2个容器
-q               # 静默模式,只显示容器编号
--no-trunc                # 不间断输出

docker run -it image名称        # 前台启动容器
exit     # 停止容器并退出
ctrl + p + q    # 不停止容器退出,即后台运行
docker start CONTAINER_ID               # 启动已经创建的容器
docker restart CONTAINER_ID        # 重启容器
docker stop CONTAINER_ID      # 停止容器
docker kill CONTAINER_ID             # 强制停止容器
docker rm  CONTAINER_ID              # 删除已停止的容器
docker rm -f  CONTAINER_ID             # 强制删除未停止的容器
docker rm -f $(docker ps -a -q)      # 删除所有容器
docker ps -a -q | xargs docker rm      # 删除所有容器
docker run -d image_id或image名称     # 表示创建一个容器在后台运行,且前台必须使用该容器,否则会自动退出
docker logs -f -t CONTAINER_ID     # 在容器外面,查看容器日志
docker logs -f -t --tail <number> CONTAINER_ID     # 在容器外面,查看容器日志,只查看倒数第几行
docker top CONTAINER_ID       # 在容器外面,查看容器内的进程
docker inspect CONTAINER_ID         # 在容器外面,查看容器内部细节
docker attach   CONTAINER_ID           # 进入该容器,container_id通过docker ps -a查看
docker exec -it  CONTAINER_ID   <linux命令>       # 在不进入容器的情况下执行命令,操作容器
docker cp CONTAINER_ID:容器内的路径  主机路径      # 将容器内的文件复制到docker_host,即docker所在centos系统

  • docker镜像的底层原理是联合文件系统,即下载的docker镜像是一层层叠加的

例如下载centos镜像只是下载了精简的命令部分,centos镜像底层所依赖的环境是共用的当前centos主机
例如下载一个tomcat镜像,该镜像的底层需依赖kernel、centos、jdk8,最后暴露的一层才是tomcat

  • 提交容器案例:(相当于创建新的镜像)
docker pull tomcat:9      # 拉取tomcat9

docker run -it -p 8081:8080 tomcat:9        # 启动tomcat9,第一个8081是自定义的端口,第二个8080是tomcat的默认端口
# 这时可在浏览器通过:http://lcoalhost:8081访问docker中的tomcat容器
docker run -d -p 8082:8080 tomcat9    # 后台启动方式
docker run -it -P tomcat:9     # 使用大写的p时,docker会随机指定端口;使用命令docker ps 查看端口
docker commit -a="作者" -m="备注信息"   CONTAINER_ID   chnq/tomcat9:9.1      # 提交创建新的镜像,chnq/tomcat9表示镜像名称,9.1表示版本号
  • 容器数据卷:用于容器中数据持久化、用于容器间数据共享
容器数据卷使用方式一:使用命令
docker run -it -v /宿主机上的路径:/容器上的路径  镜像名   # 表示运行一个镜像,宿主机上新建的文件夹内和容器中新建的文件夹内数据共享,通过docker inspect CONTAINER_ID 可查看容器于宿主机的绑定细节
docker run -it -v /宿主机上的路径:/容器上的路径:ro  镜像名   # 表示运行一个镜像,宿主机上新建的文件夹内和容器中新建的文件夹内数据共享,但容器内的文件夹只能读取宿主机上文件夹内的数据,容器内的文件夹不能进行写操作
# 若出现报错
# 解决方案,添加如下:docker run -it -v /宿主机上的路径:/容器上的路径   --privileged=true 镜像名

数据卷使用方式二:dockerFile

在任意路径下新建一个可执行的shell脚本,自定义名称;例如vim Dockerfile

编写内容如下,from表示要操作centos镜像,volume表示要在centos容器中新建多个共享的数据卷文件夹

编写完成后保存退出,就在Dockerfile所在目录下执行命令:docker build -f /mydocker/Dockerfile -t zzyy/centos .
docker build表示会构建一个新的镜像,-f表示脚本所在路径地址,-t表示自定义的名称,最后必须以点结尾

启动该镜像,自动创建共享的数据卷文件夹

使用命令docker inspect CONTAINER_ID查看宿主机中的数据卷共享文件夹

  • 容器继承:volumes-from
docker run -it --name docker01 centos      # 启动docker镜像,并取别名
docker run -it --name docker02 --volumes-from docker01 centos    # 使用centos镜像在创建一个容器,并继承docker01
docker run -it --name docker03 --volumes-from docker02 centos
# 可多次继承,父容器的文件会被子容器继承,子容器新建的文件会被共享到父容器,父容器删除后子容器依然存在
  • dockerFile概念
即是用来构建新的docker镜像的shell脚本
使用步骤:编写dockerFile -> build -> run
dockerFile模板:FROM scratch表示继承的总的源,最后的CMD表示执行当前脚本

  • dockerFile构建过程
编写dockerFile文件时保留字必须大写,且后面必须接参数
bulid时指令会从上往下执行;每条指令都会构建并提交一个新的镜像层
dockerFile等同于原材料,build后生成的镜像相当于原材料制造的产品,run启动镜像生成容器
  • dockerFile保留字
FROM:表示基于哪个镜像,继承自哪个镜像
MAINTAINER:用于指定当前镜像的开发者的姓名和邮箱
RUN:运行镜像时执行的命令,类似于Java中执行程序时再执行一下打印
EXPOSE:当前容器对外暴露的端口
WORKDIR:表示run启动该镜像生成容器后,会进入容器内的指定路径
ENV:构建镜像过程中设置环境变量
ADD:类似于Java中导入依赖并解压
COPY:类似于Java中导入依赖不解压
VOLUME:使用该镜像创建容器时会自动创建容器数据卷
CMD:指定容器启动时要运行的命令,只有最后一条命令生效
ENTRYPOINT:指定容器启动时要运行的命令,可追加命令
ONBUILD:当构建一个子镜像时继承该镜像会触发onbuild命令
  • 使用dockerFile自定义镜像
从docker hub 拉取下来的centos镜像启动后会默认进入根目录,但是不支持文本编辑器和查看IP

可使用dockerFile基于原镜像之上自定义一个新的镜像
新建dockerFile编写如下内容

构建:docker build -f /dockerFile路径 -t  自定义镜像名:版本 .
启动镜像,创建容器:docker run -it 新镜像名字:TAG
列出镜像的变更历史:docker history 镜像名
  • 推送镜像到docker hub
docker login  # 输入docker-hub注册时的用户名和密码
docker images -a   # 查看所有镜像,选择要推送的镜像
docker tag  镜像名:版本号 DockerHub用户名:自定义镜像名:版本号
docker push hub用户名/自定义镜像名:版本号

相关文章

起步 处理器架构,参考 x86是指intel的开发的一种32位指令集...
pscp pscp -P 22 C:\work\test.txt root@192.168.1....
文件处理 ls -a # 显示所有文件 ls -l # 显示详细信息 ls -d...
准备一台电脑(我就用联想拯救者r7000演示) 参考博客制作启...
认识 Linux系统是参考了UNIX系统作为模板开发的,但没有使用...
文件处理命令 以 . 开头的文件是隐藏文件 以 - 开头表示这是...