前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Docker学习笔记

Docker学习笔记

原创
作者头像
黄啊码
修改2022-07-15 12:19:01
5870
修改2022-07-15 12:19:01
举报
  • 镜像(image) docker镜像就好比一个模板,可以通过这个模板来创建容器服务,通过这个镜像可以创建多个容器,最终服务或项目运行在这些容器中
  • 容器(container) docker利用容器技术,独立运行一个或者一组运用,容器通过镜像来创建
  • 仓库(repository) 仓库就是存放镜像的地方,可以分为公有仓库和私有仓库,常见公有: Docker Hub、阿里云、华为云都有容器服务器

一、安装Docker

参照官网进行安装Docker Desktop

macOS下安装成功查看版本信息

image-20210626154521604
image-20210626154521604

二、Docker常用命令

  • 基本命令
#版本信息
docker version       
#详细信息
docker info
#命令帮助
docker [command] --help
复制代码
  • 镜像相关
#搜索镜像
docker search xxxx
#拉取镜像 
docker pull mysql[:版本号]
#查看镜像:-a-->查看全部;-q-->只查看id
docker images [-a/-q]
#删除指定镜像
docker rmi -f 镜像id
#删除多个镜像
docker rmi -f 镜像id 镜像id
#删除全部镜像
docker rmi -f $(docker images -aq)
复制代码
image-20210626170948669
image-20210626170948669
image-20210626171344108
image-20210626171344108
  • 容器相关
docker run [] image

#参数说明
--name="Name"
-d   #后台方式运行,如果使用后台运行,必须要有一个前台进程,如果没有的话容器会自动停止
-it  #使用交互方式运行,进入容器查看内容
-p   #指定容器的端口 -p 8080:8080
	-p 主机端口:容器端口  #最常用
	-p 容器端口
	容器端口
	-p ip:主机端口:容器端口
-P   #随机指定端口

exit #从容器停止并退出
Ctrl + p + q #容器不停止退出
docker exec -it 容器id /bin/bash
复制代码
image-20210626172708752
image-20210626172708752
image-20210626173813109
image-20210626173813109
#查看容器
docker ps 命令
     #没有接命令,表示当前运行的容器
-a   #列出当前正在运行的,带出历时运行过的
-n=? #显示最近创建的容器,如 -n=1表示最近1个
-q   #只显示容器的编号

#查看容器(镜像)详细信息
docker inspect [options] name|id
 -f
 -s
复制代码
image-20210626173504944
image-20210626173504944
#启动和停止容器
docker start 容器id  #启动
docker restart 容器id   #重启容器
docker stop 容器id  #停止当前正在运行的容器
docker kill 容器id  #强制停止当前容器

#移除容器
docker rm 容器id   #如果容器正在运行,无法移除容器
docker rm -f 容器id   #强制移除容器

#日志
docker logs 
#查看进程
docker top 容器id

复制代码
#进入容器后开启一个新的终端,可以在里面操作(常用)
docker exec -it 容器id
#进入容器正在执行的终端,不会启动新进程
docker attach 容器id
复制代码
image-20210627174048516
image-20210627174048516
#从容器中拷贝文件到主机
docker cp 容器id:路径 主机路径
复制代码
image-20210627175202214
image-20210627175202214

三、Docker镜像

镜像是一种轻量级、可执行的独立软件包,用来打包软件运行环境和基于运行环境开发的软件,它包含运行某个软件所需的所有内容,包括代码、运行时、库、环境变量和配置文件 所有应用直接打包docker就可以跑起来 pull远程仓库、朋友拷贝、自己制作

1. docker镜像加载原理
  • UnionFs(联合文件系统) 分层、轻量级,基于叠加
  • docker镜像加载
    • 实际上由一层一层的文件系统(UnionFs)组成
    • bootfs:BootLoader + kernel,BootLoader主要是引导kernel
    • rootfs:bootfs之上,
img
img
2. commit 镜像

镜像是无法修改的,当运行一个镜像后,会产生一个容器,修改只在容器层上生效,当commit容器后会生成一个新的镜像,作为以后备用,以此类推,以后不断叠加,产生出新的镜像。就像虚拟机中的快照一样。

#将当前容器提交为镜像
docker commit -m="message" -a="author" 容器id 镜像名:[tag]
复制代码

四、容器数据卷

容器数据卷:容器中数据的持久化和同步操作,容器间的数据也是可以共享的 docker run -it -v 主机目录:容器内目录 镜像 /bin/bash 复制代码 可以使用多个-v

image-20210628172918455
image-20210628172918455
实战:安装mysql
# -p 端口映射
# -v 卷挂载
# -e 环境配置
# --name 容器名
docker run -d -p 3310:3306 -v ~/home/mysql/conf:/etc/mysql/conf.d -v ~/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql
复制代码

使用Navicat连接docker容器中数据库是发生错误

image-20210628183856206
image-20210628183856206

问题的发生原因:mysql8之前版本的加密规则是mysql_native_password,而在mysql8之后,加密规则是caching_sha2_password 解决方案:①升级Navicat驱动;②将加密规则还原为mysql_native_password(下面采用这种方案) #进入容器 docker exec -it 容器id bash #登录mysql mysql --user=root --password #修改加密规则 alter user 'root' identified with mysql_native_password by '123456'; 复制代码

image-20210628185157659
image-20210628185157659

在Navicat中创建一个数据库后,查看主机挂载路径下已经生成了对应的文件

image-20210628184532619
image-20210628184532619
具名和匿名挂载
#匿名挂载 -v后直接跟容器路径
docker run -d -P --name nginx01 -v /etc/nginx nginx
#具名挂载 -v后加卷名:容器路径
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx nginx
#查看卷的相关信息
docker volume command
 create  #创建一个卷
 inspect #查看详情 (跟卷名)
 ls      #列出所有的卷
 prune   #移除不用的卷
 rm      #移除一个或多个卷
复制代码
image-20210628192619540
image-20210628192619540
image-20210628193027025
image-20210628193027025

所有docker容器内的卷,没有指定目录的情况下,都是在/var/lib/docker/volumes/路径下 通常我们使用的是具名挂载 (指定路径挂载前面 已经讲过,即-v后面加 宿主机路径:容器路径

还可以通过-v容器内路径:ro/rw来改变读写权限

#  :ro表示这个路径只能通过宿主机来更改,容器内部是无法操作的
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx:ro nginx
#  :rw表示可读可写
docker run -d -P --name nginx01 -v hasNameNginx:/etc/nginx:rw nginx
复制代码

五、DockerFile

dockerfile是用来构建docker镜像的文件,本质就是一个命令参数脚本

  • 编写一个dockerfile文件
  • docker build 构建成为一个镜像
  • docker run 运行镜像
  • docker push 发布镜像
DockerFile构建过程:
  • 基础知识
    1. 每个关键字(指令)必须是大写
    2. 执行从上到下顺序执行
    3. #表示注释
    4. 每一个指令都会创建提交一个新的镜像层
img
img

dockerfile是面向开发的,我们以后要发布项目,做镜像就需要编写dockerfile文件,这个文件十分简单

docker镜像逐渐成为企业交付的标准,必须掌握!

步骤:开发、部署、运维....

  • DockerFile:构建文件,定义了一切的步骤
  • DockerImages:通过DockerFile构建生成的镜像,最终发布和运行的产品
  • Docker容器:容器就是镜像运行起来提供服务器
FROM        #指定基础镜像
MAINTAINER  #镜像是谁写的,一般是加上姓名和邮箱
RUN         #docker镜像构建的时候需要运行的命令
ADD         #往镜像中添加内容
WORKDIR     #镜像的工作目录
VOLUME      #挂载的目录位置
EXPOSE      #保留端口配置
CMD         #指定这个容器启动的时候要运行的命令,只有最后一个会生效
ENTRYPOINT  #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD     #当构建一个被继承dockerfile这个时候就会运行ONBUILD指令
COPY        #类似add,将我们的文件拷贝到镜像中
ENV         #构建的时候设置环境变量
复制代码
image-20210628210703930
image-20210628210703930

DockerHub中99%的镜像从scratch这个基础镜像开始构建,然后配置需要的软件和相关配置

image-20210628211926987
image-20210628211926987

创建一个自己的centos #构建镜像 docker build -f dockerfile文件路径 -t 镜像名:[tag] 复制代码

image-20210628221418852
image-20210628221418852
image-20210628221519321
image-20210628221519321

构建完毕后,我们创建的centos就可以使用vim或net相关的命令了

image-20210628222930478
image-20210628222930478

可以使用docker history name|id查看一个镜像的构建过程

image-20210628223109498
image-20210628223109498

对比CMDENTRYPOINT

  • CMD:覆盖
  • ENTRYPOINT:追加
image-20210628225248394
image-20210628225248394
image-20210628225407257
image-20210628225407257

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、安装Docker
  • 二、Docker常用命令
  • 三、Docker镜像
    • 1. docker镜像加载原理
      • 2. commit 镜像
        • 实战:安装mysql
        • 具名和匿名挂载
        • DockerFile构建过程:
    • 四、容器数据卷
    • 五、DockerFile
    相关产品与服务
    容器镜像服务
    容器镜像服务(Tencent Container Registry,TCR)为您提供安全独享、高性能的容器镜像托管分发服务。您可同时在全球多个地域创建独享实例,以实现容器镜像的就近拉取,降低拉取时间,节约带宽成本。TCR 提供细颗粒度的权限管理及访问控制,保障您的数据安全。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档