0%

Docker笔记

docker介绍

docker架构

docker架构图

docker概念

名称 解释
镜像(Images) Docker 镜像是用于创建 Docker 容器的模板。
容器(Container) 容器是独立运行的一个或一组应用。
客户端(Client) Docker 客户端通过命令行或者其他工具使用 Docker API 与 Docker 的守护进程通信。
主机(Host) 一个物理或者虚拟的机器用于执行 Docker 守护进程和容器。
镜像仓库(Repository) 用来存储具体的镜像,可以理解为代码控制中的代码仓库。通过tag区分版本号
注册服务器(Registry) 用于管理镜像仓库,起到的是服务器的作用。默认是官方的Docker Hub,可以搭建私有服务器

镜像资源分为两类:

  • 官方提供的,名称不带前缀,如:hello-world
  • docker用户创建并维护的,名称带用户名前缀,如:username/hello-world

镜像名完整组成:registryhost/username/repository:tag服务主机/用户名/仓库名:版本号

  • registryhost不填,则默认为DockerHub
  • username不填,则表示docker官方提供的镜像
  • tag不填,则默认为latest

下载安装

安装

官网下载安装,按提示一步步完成,国内下载速度慢的话可以使用迅雷。

注:windows下默认安装在C盘,镜像多的话可能会导致C盘越来越大,可以修改镜像存储路径,参考博客

  • windows上安装的docker其实本质上还是借助与windows平台的hyper-v技术来创建一个linux虚拟机,你执行的所有命令其实都是在这个虚拟机里执行的,所以所有pull到本地的image都会在虚拟机的Virtual hard disks目录的文件中,这个文件就是虚拟硬盘文件。如果要想改变路径只需要在hyper-v管理器里设置就可以了。默认的安装路径是C:\Users\Public\Documents\Hyper-V\Virtual hard disks下。
  • 将默认C:\Users\Public\Documents\Hyper-V\Virtual hard disks\MobyLinuxVM.vhdx的文件拷贝到想要改变的路径
  • 控制面板->管理工具->Hyper-V管理器->右键设置->硬盘驱动器->虚拟硬盘输入为想要保存的路径

docker修改镜像路径

docker修改镜像路径

  • 我试了一下发现重启之后又恢复成原来的路径,解决如下

docker修改镜像路径

docker修改镜像路径

镜像服务器设置

Perferences… -> Daemon -> Registry mirrors配置

windows:在setting -> Daemon -> Registry mirrors中配置

镜像地址:

常用命令

可视化工具:Kitematic

分类

  • 容器生命周期管理: docker [run|start|stop| restart|kill|rm|pause|unpause]
  • 容器操作运维:docker [ps|inspect|top|attach|events|logs|wait|export|port]
  • 容器rootfs命令: docker [commit|cp|diff]
  • 镜像仓库: docker [login|pull|push|search]
  • 本地镜像管理:docker [images|rmi|tag|build|history|save|import]
  • 其他命令:docker [info|version]

命令

CONTAINER::可以是容器名也可以是容器id
REPOSITORY:仓库名
REGISTRYHOST:服务主机地址
IMAGE:镜像名
TAG:版本号,不填则默认为latest

基本

  • docker:查看docker帮助
  • docker <COMMAND> --help:查看具体命令帮助
  • docker -vdocker --version:查看docker版本
  • docker info:查看docker系统信息
  • docker inspect [OPTIONS] NAME|ID [NAME|ID...]:获取容器/镜像的元数据。
    常用OPTIONS:
    1
    2
    3
    -f :指定返回值的模板文件。
    -s :显示总的文件大小。
    --type :为指定类型返回JSON。

仓库

  • docker login -u 用户名 -p 密码: 登陆到一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
  • docker logout : 登出一个Docker镜像仓库,如果未指定镜像仓库地址,默认为官方仓库 Docker Hub
  • docker search 镜像名:从Docker Hub查找镜像
  • docker pull [OPTIONS] NAME[:TAG|@DIGEST]: 从镜像仓库中拉取或者更新指定镜像
  • docker push [OPTIONS] NAME[:TAG]:将本地的镜像上传到镜像仓库,要先登陆到镜像仓库

容器

  • docker container lsdocker ps:列出运行的容器,加-a或–all可列出所有容器

    • COMMAND列表示容器启动时执行的命令,加--no-trunc选项显示完整命令
  • docker create [OPTIONS] 镜像名:创建新容器,但不启动

  • docker run [OPTIONS] 镜像名:创建新容器并运行
    会从本地查找镜像,若不存在,则从默认公共镜像源(DockerHub)下载
    常用OPTIONS:

1
2
3
4
-p: 端口映射,格式为:主机(宿主)端口:容器端口  
-d: 后台运行容器,并返回容器ID,不加-d会显示日志
--name:为容器指定名称
······
  • docker start [OPTIONS] CONTAINER [CONTAINER...]:启动一个或多个已经被停止的容器

  • docker stop [OPTIONS] CONTAINER [CONTAINER...]:停止一个或多个运行中的容器

  • docker restart [OPTIONS] CONTAINER [CONTAINER...]:重启一个或多个容器

  • docker kill [OPTIONS] CONTAINER [CONTAINER...]:杀掉一个或多个运行中的容器

  • docker rm [OPTIONS] CONTAINER [CONTAINER...]:删除一个或多少容器

  • docker logs [OPTIONS] CONTAINER:获取容器的日志

  • docker top [OPTIONS] CONTAINER [ps OPTIONS]:查看容器中运行的进程信息,支持 ps 命令参数。

镜像

  • docker images:列出本地镜像
  • docker inspect [OPTIONS] NAME|ID [NAME|ID...]:获取容器/镜像的元数据
    常用OPTIONS:
    1
    2
    3
    -f :指定返回值的模板文件。
    -s :显示总的文件大小。
    --type :为指定类型返回JSON。
  • docker build [OPTIONS] PATH | URL | -:根据Dockerfile构建镜像
    常用OPTIONS::
1
2
- -t,--tag : 镜像的名字及标签,通常 name:tag 或者 name 格式;可以在一次构建中为一个镜像设置多个标签。
- -f : 指定Dockerfile路径
  • docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]:从容器创建一个新的镜像

    常用OPTIONS:

    1
    2
    3
    4
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停。
  • docker tag [OPTIONS] IMAGE[:TAG][REGISTRYHOST/][USERNAME/]NAME[:TAG]:修改镜像的所属仓库

  • docker rmi [OPTIONS] IMAGE [IMAGE...]:删除一个或多个本地镜像

    OPTIONS说明:

    1
    2
    -f :强制删除;
    --no-prune :不移除该镜像的过程镜像,默认移除;

把镜像上传到Docker Hub

注册docker账号

DockerHub

  • 输入DockerId(即用户名,英文小写和数字),邮箱,密码
  • 邮箱验证

在hub上创建仓库

Create Repository,起名,如hello-world,则路径为username/hello-word

下载镜像

搜索镜像:docker search hello-world

拉取镜像:docker pull hello-world

运行容器

创建新容器并运行:docker run --name my-hello-world -d hello-world

查看容器

docker psdocker container ls:可以看到容器id,容器名称等信息。

创建镜像

基于Dockerfile构建新镜像

待补充//todo

使用commit从容器创建镜像

docker commit -p 容器id/容器名 my-hello-world:v1

查看镜像

查看本地镜像:docker images

可以修改镜像的所属仓库:
docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

登录docker账号

输入docker login,接着输入用户名和密码
或者在docker图形界面登录

本地镜像上传到镜像仓库

docker push username/my-hello-world:v1:上传成功后可以到hub上查看是否创建成功

问题记录

原先在windows上用的终端是Git Bash,在使用docker的jenkins容器时,需要docker exec -it jenkins /bin/bash,进入交互解释器,提示the input device is not a TTY. If you are using mintty, try prefixing the command with 'winpty'

这是由于终端和linux不一样,网上有很多解决办法,说的有点多,弄了一会没弄好就没耐心了,正好我觉得Git Bash不太好用了,如复制粘贴快捷键(一点都不快捷,笔记本的键盘可能会好点)是Ctrl+insShift+ins,且命令提示也不是很友好,于是趁此机会换了cmder命令行工具,顺便学习了一下,结果很满意,想看的可以移步这里

结语

参考资料:

欢迎关注我的其它发布渠道