展开
拓展 关闭
订阅号推广码
GitHub
视频
公告栏 关闭

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用户名/自定义镜像名:版本号
posted @   DogLeftover  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示