docker入门

docker入门笔记

(仅作为个人笔记,如有雷同,请联系删除。。)

一个小栗子:
	docker pull ubuntu:载入Ubuntu镜像
	docker run ubuntu:启动容器,-d:启动后进入后台
	docker ps -a:查看所有容器
	docker start xxx:启动一个已停止的容器
	docker stop xxx:停止容器
	docker restart xxx:重启容器

参考:https://blog.csdn.net/m0_49960764/article/details/124292208


  Docker是一个开源的应用容器引擎,让开发者可以将他们的应用以及依赖包打包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,可以实现虚拟化,容器是a完全使用沙箱机制,对峙之间不会有任何接口。

  Docker使用客户端-服务器(C/S)架构模式,使用远程API来管理和创建Docker容器。Docker容器通过Docker镜像来创建。容器与镜像的关系类似于对象编程中的对象与类。

在这里插入图片描述

官网:https://docs.docker.com/
官方文档:https://docs.docker.com/desktop/
官方API:https://docs.docker.com/reference/

一句话概括容器:容器就是将软件打包成标准化单元,以用于开发、交付和部署。


1. Docker基本组成

  1. 镜像(Image)
  2. 容器(Container)
  3. 仓库(Repository)

2. Docker安装

  1. 卸载旧版本yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine

  2. 下载依赖安装包:yum install -y yum-utils

  3. 配置镜像仓库
    i. 使用国外的地址:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
    ii. 使用阿里云的Docker镜像仓库:yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

  4. 更新yum软件包:yum makecache fast

  5. 下载docker
    i. 安装社区版:yum install docker-ce docker-ce-cli containerd.io
    ii. 安装企业版:yum install docker-ee docker-ee-cli containerd.io

  6. 启动docker

    systemctl start docker # 启动Docker 
    docker version # 查看当前版本号,是否启动成功 
    systemctl enable docker # 设置开机自启动
    
  7. docker的HelloWord:docker run hello-world,初次使用,本地是没有HelloWord的容器的,会从远程镜像仓库pull一个最新的下来,远程仓库是有HelloWord的

  8. 卸载docker

    yum remove docker-ce docker-ce-cli containerd.io # 卸载依赖
    rm -rf /var/lib/docker # 删除资源,注意:./var/lib/docker是docker的默认工作路径
    

3. Docker运行流程

  1. 容器[containers]
    i. 容器的新增

    1. docker create -it --name 容器名称 镜像名称 /bin/bash # -i:交互式命令行,-t:将虚拟环境的交互式绑定到一个终端上
    2. docker run -dit --name 容器名称 镜像名称 /bin/bash # -d:守护容器,即使退出终端,容器仍然运行

    ii. 容器的修改
    3. docker container ls --all,查看所有的容器
    4. docker container stop xxx停止指定的容器
    5. docker container rm xxx删除指定停止的容器
    6. docker container kill xxx,杀死一个正在运行的容器(停止)
    7. docker container start xxx开启一个停止的容器


    iii. 容器的查询

    1. docker ps -a查询容器
  2. 镜像[image]
    i. 镜像的新增

    1. docker pull xxx从远程仓库拉取指定镜像
    2. docker run xxx,从远程仓库拉取指定镜像,并运行容器
    3. docker load -i ${filePath},从本地tar文件加载镜像,-i:读取一个tar文件,取代标准输入
    4. docker commit xxx,制作镜像,从容器创建一个新的镜像


    ii. 镜像的删除

    1. docker rmi 镜像id删除镜像


    iii. 镜像的修改

    1. docker tag ${old_tag} ${new_tag},修改镜像的tag标签

    2. docker push docker账号id/镜像名称[:tag标签],上传镜像到docker公共仓库中 —— Dockerhub

    3. docker push ip:端口/镜像名称[:tag标签],上传镜像到docker私有仓库,

      eg:docker push localhost:5001/image-registry:v1

  3. 远程仓库[registry]
    i. Dockerhub:docker公共仓库,需注册
    ii. 部署本地私有仓库

    1. 服务器:下载registry镜像,开启防火墙,创建容器
    2. 客户端:
      a. 修改/etc/sysconfig/docker不信任注册,需要加端口;
      b. 修改/etc/docker/daemon.json 添加源;
      c. 重启docker服务;
      d. 上传、下载。

在这里插入图片描述

在这里插入图片描述

4. Docker的启动流程图

在这里插入图片描述

5. Docker常用命令

  1. 管理镜像常用命令

    ls # 列出镜像
    build # 使用Dockerfile创建镜像
    history # 查看镜像历史
    inspect # 显示一个或多个镜像的详细信息
    pull # 从镜像仓库拉去镜像
    push # 推送镜像到镜像仓库
    rm # 移除一个或多个镜像
    prune # 移除未使用的镜像【没有被标记或者被任何容器引用的】
    tag # 创建一个引用源镜像标记的目的镜像
    export # 导出容器文件系统到tar归档文件
    import # 导入tar归档文件来创建镜像
    save # 保存一个或多个镜像到一个tar归档文件
    load # 加载镜像(从tar归档文件或标准输入)
    
  2. 创建容器常用选项

    -i, -iteractive # 交互式
    -t, -tty # 分配一个伪终端
    -d, detach # 运行容器到后台
    -e, -env # 设置环境变量
    -p, -publish list # 发布容器端口到主机
    -P, -publish-all # 发布容器所有EXPOSE的端口到宿主机随机端口
    -name string # 指定容器名称
    -h, -hostname # 设置容器主机名
    -ip string # 指定容器ip,只能用于自定义网络
    -network # 连接容器到一个网络
    -mount mount # 将文件系统挂载到容器
    -v, -volume list # 绑定挂载一个卷
    -restart string # 容器退出时重启策略,默认为no,可选值:always | on-failure
    
  3. 容器限制常用选项

    -m, -memory # 容器可以使用的最大内存
    -memory-swap # 允许交换到磁盘的内存量
    -memory-swappiness=<0~100> # 容器使用swap分区交换的百分比,0~100,默认-1
    -oom-kill-disable # 禁用OOM Killer
    --cpus # 可以使用的CPU数量
    -cpuset-cpus # 限制容器使用特定的CPU核
    -cpu-shares # CPU共享(相对权重)
    

6. docker基本命令参数

	attach # 将本地标准输入、输出和错误流附加到正在运行的容器
	build # 使用Dockerfile创建镜像
	commit # commit容器,根据容器的更改创建一个新的镜像,可以添加提交信息
	cp # 在容器和本地文件系统之间复制文件
	create # 创建容器
	diff # 检查容器文件系统中文件或目录的更改
	events # 从服务器获取实时事件
	exec # 在运行的容器中执行命令
	export # 将容器的文件系统导出为tar存档
	history # 显示镜像的历史记录
	images # 列出镜像
	import # 从tarball导入内容以创建文件系统镜像
	info # 显示docker应用的信息
	
	inspect # 显示有关docker镜像的信息
	kill # 强制停止服务容器
	load # 从tar存档文件或stdin加载镜像
	login # 登录docker中央仓库
	logout # 退出docker中央仓库
	logs # 获取容器的日志
	pause # 暂停一个或多个容器中的进程
	port # 列出端口映射或容器的指定映射
	ps # 显示容器
	pull # 从docker中央仓库拉取镜像
	push # 将镜像推送到docker中央仓库
	rename # 容器重命名
	restart # 重启容器
	
	rm # 删除一个或多个容器
	rmi # 删除一个或多个镜像
	run # 创建一个新的容器并运行一条命令
	save # 将一个或多个镜像保存到tar存档(默认情况下流式传输到stdout)
	search # 在Dockerhub中搜索镜像
	start # 启动停止的容器
	stats # 以实时信息流的方式显示容器资源使用情况统计的信息
	stop # 停止容器
	tag # 给target_image创建一个引用source_image的标记
	top # 显示容器的运行进程 
	unpause # 取消暂停容器中的进程
	update # 更新容器的配置
	wait # 阻止一个或多个容器直到容器停止,然后打印退出代码

7. 镜像命令

  1. docker images,查看本地主机的所有镜像。参数:-a/--all 列出所有镜像,-q/--quiet 只显示镜像的id

  2. docker search,搜索镜像。参数:-f/--filter filter、--format string、--limit int、--no-trunc

    eg:
    docker search mysql --filter STARS>300,搜索收藏数大于300的mysql镜像

  3. docker pull 镜像名[:tag],下载镜像。

    eg:
    docker pull mysql:5.7

  4. docker rmi,删除镜像。

    eg:
    docker rmi -f image_id1 image_id2 image_id2

8. 容器命令

  1. docker run [可选参数] image [command] [arg...]创建一个新的容器并运行一个命令

    可选参数
    -a,指定标准输入输出内容类型,可选值:stdin、stdout、stderr
    --name="xxx",指定容器名称
    -d,后台方式运行容器
    -it,使用交互方式运行,进入容器查看内容
    -p ip:主机端口:容器端口,配置主机端口映射到容器端口
    -p 主机端口:容器端口
    -p 容器端口, 指定容器的端口
    -P,随机指定端口

  2. docker run -it [容器id] /bin/bash进入容器

  3. exit退出容器

  4. docker ps列出当前正在运行的容器

    可选参数
    -a,列出所有容器的运行记录
    -n=?,显示最近创建的n个容器,默认-1
    -q,只显示容器的编号
    -s,显示总文件大小

  5. docker rm 容器id删除指定的容器【注意:不能删除正在运行的容器

    可选参数:
    -f,强制删除,包括正在运行的容器
    -l,删除容器间的网络连接,而非容器本身
    -v,删除与容器关联的卷

    eg,删除所有的容器:
    docker rm -f $(docker ps -aq)
    docker ps -a -q | xargs docker rm

  6. docker start 容器id启动容器

  7. docker restart 容器id重启容器

  8. docker stop 容器id停止当前运行的容器

  9. docker kill 容器id强制停止当前容器

  10. docker run -d 镜像名后台启动容器

  11. docker logs [OPTIONS] 容器id查看日志

    Options:
    -f,跟踪日志输出,实时查看日志,类似tail -f
    --since,开始时间,查看从这个时间开始的所有日志
    -t,显示时间戳
    -n,仅列出最新n条容器日志,默认全部

    常用:
    docker logs -tf 容器id查看实时日志,显示时间戳
    docker logs --tail NUM 容器id查看容器的最后NUM行日志
    docker logs -n NUM 容器id查看最新的NUM条日志

    eg:
    docker logs -tf --tail 10 容器id,实时查看容器的最后10行日志,并显示时间戳

  12. docker top 容器id查看容器中的进程信息

  13. docker inspect [OPTIONS] name|id [name|id ...]查看镜像/容器的元数据

    Options:
    -f,指定返回值的模板文件
    -s,显示总的文件大小
    --type,为指定类型返回json

  14. docker exec -it 容器id /bin/bash进入当前正在运行的容器。【注意:进入容器后开启一个新的终端,可以在里面操作
    docker attach 容器id,同样是进入当前正在运行的容器。【注意:进入容器正在执行的终端,不会启动新的进程

  15. docker cp 容器id:容器内路径 目的主机路径copy容器的文件到主机中
    docker cp 主机文件路径 容器id:容器内目的路径copy主机的文件到容器中

    eg:
    docker cp 32a6:/home/bin/test.sh /root/cust/

9. Docker镜像加载原理

  1. docker镜像实际上是由一层层的文件系统组成,这种层级文件系统就是联合文件系统镜像分层、叠加。底层的镜像都是一个个独立可复用的镜像,如果下载其他镜像时,某一层镜像是已经存在本地的了,就不用在下载,直接复用该镜像,节省空间。
    在这里插入图片描述
      使用docker inspect redis镜像的ID 命令查看镜像的元信息,找到layer信息,可以看到镜像的分层。
  2. Docker镜像都是只读的,用镜像创建容器启动时,实际上是在原本的镜像上新建了一层可写层到原本镜像的顶部,这一层我们叫作容器层,容器层之下的叫作镜像层

10. 容器数据卷

  为了实现数据持久化,使容器之间可以共享数据。可以将容器内的目录,挂载到宿主机上或其他容器内,实现同步和共享的操作。即使将容器删除,挂载到本地的数据卷也不会丢失。

  1. 直接使用-v命令来挂载docker run -it -v 主机目录:容器内目录

    eg:
    docker run -it -v /home/test:/home centos /bin/bash,此时修改主机/home/test/目录下的文件,容器中/home/目录下文件会同步修改。

  2. 具名和匿名挂载
    i. 匿名挂载docker run -v 容器内路径,在 -v 只写了容器内的路径,没有写容器外的路径。

    eg:
    docker run -d -P --name nginx01 -v /etc/nginx nginx,-P 随机指定端口

    ii. 具名挂载docker run -v 卷名:容器内路径

    eg:
    docker run -d -P --name nginx02 -v volume_nginx:/etc/nginx nginx

    iii. 查看卷名:docker volume ls
    iv. 查看卷信息:docker volume inspect 卷名

    **注意:**所有docker容器内的卷,没有指定目录的情况下都是
    /var/lib/docker/volumes/卷名/_date[宿主机的该目录下??]

    v. 匿名挂载、具名挂载、指定路径挂载的区分

    1. -v 容器内路径,匿名挂载
    2. -v 卷名:容器内路径,具名挂载
    3. -v 宿主机路径:容器内路径,指定路径挂载


    vi. 容器间的数据同步/同步挂载docker run -it --name docker02 --volumes-from docker01 镜像名

    docker01:数据卷容器
    docker02:创建出的新容器
    - -volumes-from:同步挂载参数

    docker01 创建的数据会同步到 docker02 上!!两个容器的数据同步,意味着现在 docker02 创建的数据也会同步在 docker01 上。

    vii. 容器之间配置信息的传递,数据卷的生命周期一直持续到没有容器为止!但如果持久化到了本地,那么此时,本地的数据是不会被删除的!

11. DockerFile

  Dockerfile用来构建docker镜像的构建稳健,也就是命令脚本。

  1. 构建步骤
    i. 构建一个dockerfile文件
    ii. docker build 构建成为一个镜像;
    iii. docker run 运行镜像;
    iv. docker push 发布镜像,到DockerHub、阿里云镜像仓库等。

  2. 使用dockerfile构建镜像docker build -f filename -t 镜像名:tag

    eg:docker build -f dockerfile01 -t ldq/centos:1.0

  3. 列出当前镜像:docker images

  4. DockerFile构建过程:
    i. 每个保留关键字(指令)都必须是大写字母;
    ii. 执行顺序从上到下;
    iii. #表示注释;
    iv. 每一个指令都会创建一个新的镜像层,并提交。

  5. DockerFile关键字
    FROM | 指定父镜像 | 指定dockerfile基于哪个image构建

关键字作用备注
FROM指定父镜像指定dockerfile基于哪个image构建
MAINTAINER作者信息用来标明这个dockerfile的作者
LABEL标签用来标明dockerfile的标签。可以使用label代替maintainer,最终都是在docker image基本信息中可以查看
RUN执行命令执行一段命令,默认是/bin/sh。格式:RUN command,或者:RUN [“command”, “param1”, “param2”]
CMD容器启动命令提供启动容器时的默认命令,和ENTRYPOINT配合使用。格式:CMD command param1 param2,或者:CMD [“command”, “param1”, “param2”]——【指定容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT入口一般在制作一些执行就关闭的容器中会使用——【指定容器启动的时候要运行的命令,可以追加命令
COPY复制文件build的时候复制文件到image中
ADD添加文件build的时候添加文件到image中。不局限于当前build上下文,可以来源于远程服务
ENV环境变量指定build时的环境变量,可以在启动容器的时候通过-e覆盖。格式:ENV name=value
ARG构建参数只在构建的时候使用的参数,如果有env,则同名的arg参数会被env覆盖掉
VOLUME定义外部可以挂载的数据卷指定build的image哪些目录可以在启动的时候挂载到文件系统中。启动容器的时候用-v绑定。格式:VOLUME [“目录”]
EXPOSE暴露端口定义容器运行时监听的端口。启动容器时使用-p来绑定暴露端口。格式:EXPOSE 8080,或者:EXPOSE 8080/udp
WORKDIR工作目录指定容器内部的工作目录。如果没有创建则自动创建,如果指定/开头,使用的是绝对路径,如果不是/开头,那么是在上一条WorkDir路径的相对路径
USER指定执行用户指定build或者启动时候的执行用户,在run、cmd、entrypoint执行的时候的用户
HEALTHCHECK健康检查指定监测当前容器的健康监测命令。基本没用,因为很多时候应用本身有健康监测机制
ONBUILD触发器当存在ONBUILD关键字的镜像作为基础镜像的时候,在执行FROM完成后,会执行onbuild命令,但是不影响当前镜像
STOPSIGNAL发送信号量到宿主机设置发送到容器的系统调用信号以退出
SHELL指定执行脚本的shell指定run、cmd、entrypoint指定命令时使用的shell
  1. 举例:编写一个dockerfile
# 编写dockerfile文件
$ vim /root/MyDockerfileCentos
FROM centos:7
MAINTAINER daqiang

ENV MYPATH /root/daqiang/dockerfiles
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "---end---"
CMD /bin/bash

# 使用编写的dockerfile文件构建镜像
docker build -f /root/MyDockerfileCentos -t mycentos:1.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值