博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Docker 简单入门笔记
阅读量:6578 次
发布时间:2019-06-24

本文共 5645 字,大约阅读时间需要 18 分钟。

Docker 简单入门

Docker 安装

Docker 镜像加速器

  • Docker 官方提供的中国 registry mirror
  • 阿里云加速器
  • DaoCloud 加速器
# 以Mac下Docker为列, 自己注册的 DaoCloud,使用后速度明显加快# Docker -> Perferences -> Daemon -> Register Mirrors    http://796958e9.m.daocloud.io复制代码

Docker 镜像 Image

镜像是只读的,容器的创建基于镜像,是可读写的。

拉取镜像

  • 镜像仓库地址: 格式 <域名/IP>[:端口号],默认Docker Hub
  • 仓库名: 两段式命名 <用户名>/<软件名>,对于Docker Hub,默认 library
docker pull [options] [Docker Registry Address[:port]/]仓库名[:tags]复制代码
docker pull ubuntu:16.04复制代码

镜像多层存储,下载时非单一文件;下载给出了每一层的前12位,下载完成给出完整的sha256,确保下载的一致性。

通过镜像运行容器

  • -i 保持容器的输入流
  • -t 打开一个虚拟终端
  • --rm 退出后删除容器
  • ubuntu:16.04 用什么镜像来启动容器
  • bash 放在镜像的执行的命令
docker run -it --rm ubuntu:16.04 bash复制代码

docker run 运行容器, 进入后,可以使用exit退出容器

查看镜像

docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEswoft/swoft         latest              ab82de1dcd2c        14 hours ago        470MB复制代码

分别对应: 仓库名便签镜像ID创建时间占用空间

# docker image ls [镜像名称[:tag]] 可以列出部分镜像docker image ls swoft/swoft# docker image ls -f [options]  -f/--filter过滤器docker image ls -f since=ubuntu:16.04 // 在之后的镜像docker image ls -f before=ubuntu:16.04 // 在之前的镜像# 展示特定格式的信息docker image ls -q # 列出虚悬镜像的ID# format 筛选, 参数支持 Go的模版语法docker iamge ls --format “{
{.ID}}: {
{.Repository}}”复制代码

镜像体积

  • 本地镜像与Docker Hub不同,Docker Hub 是压缩后的体积,减少网络传输
  • 本地镜像总和与实际磁盘占用可能不同, Docker镜像分层存储,可能存在相同的基础镜像
  • 可用通过docker system df 查看景象,容器,数据卷的占用空间
docker system dfTYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLEImages              1                   1                   469.9MB             0B (0%)Containers          2                   0                   1.945kB             1.945kB (100%)Local Volumes       0                   0                   0B                  0BBuild Cache                                                 0B                  0B复制代码

虚悬镜像

  • 由于新旧镜像同名,旧镜像名称被取消,出现仓库名,标签均为<none>的镜像,即无标签,无仓库名
  • 无价值,通过docker image prune删除无用镜像

中间件镜像

  • 为了加速构建,重复利用资源,Docker会利用中间件镜像,这些 镜像不应该删除,删除后会导致上层镜像无法使用
  • 当删除依赖它们的镜像后,中间件镜像也会连带删除
  • 可以通过docker image ls -a

删除镜像

docker image rm [选项] 
<镜像1>
[
<镜像2>
<镜像3>
...]复制代码
docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEswoft/swoft         latest              ab82de1dcd2c        15 hours ago        470MBdocker image rm swoft/swoft:lastest # 镜像名 
<仓库名>
:
<标签>
docker image rm ab8 # 短ID,一般前3位即可复制代码
通过镜像摘要
docker image ls --digestsdockge image rm swift/swift@sha256:065fccd3d6bf9cc26e4ceafa3241b5b1aaef89acc54f8b4a59986d23f00bf56e复制代码
通过docker image ls配合删除
docker image rm $(docker image ls -q redis)docker image rm $(docker image ls -q -f since=ubuntu:16.04)复制代码
Untagged & Deleted

删除信息分为两类: UntaggedDeleted

Untagged 取消镜像的标签,一个镜像可以对应多个标签,当镜像的所有标签都被取消后,该镜像可能失去了存在的意义,触发删除行为Deleted

如果当前镜像的某一层依然被依赖,则也不会被删除,即Deleted

如果镜像还存在容器,则也不会被删除

Docker 容器 Contanier

独立运行的一个或一组应用

启动

启动容器有两种方式,一种根据镜像新建容器并启动,另一种存在stoped的容器,直接启动,无需新建

新建并启动docker run
# 命令 docker run docker run -it ubuntu:16.04 bash# -i 让容器的标准输入保持打开# -t 让docker分配一个虚拟终端,并绑定到容器的标准输入上# bash 执行的命令复制代码

流程

  • 本地是否存在该镜像,如果不存在,从仓库中拉去
  • 利用镜像创建一个容器
  • 分配一个文件系统,并在只读的镜像层外挂载一层可读写层
  • 从宿主主机中配置的网桥接口桥接一个虚拟接口到容器
  • 从地址池中分配一个ip地址给容器
  • 执行用户制定的命令
  • 执行完成后,容器被终止
直接启动docker container start
# 命令 docker container start [Container ID or Names]docker ps -a # 查看所有的容器docker container start webserver # 启动stoped状态下的容器复制代码

后台运行docker run -d

docker run -d ubuntu:16.04 bash# 加上-d参数 让容器后台运行# 查看容器的输出信息docker container logs [Container ID or Names]复制代码

终止

  • 命令运行完自动终止
  • 手动终止docker container stop [Container ID or Names]

进入容器

某些时候,需要进入容器进行操作,包括使用docker attachdocker exec

docker attach
# 后台运行docker run -dit ubuntu# 查看容器状态docker container ls# 进入容器docker attach [Container ID or Names]# 进入后,如果输入exit推出,容器也会随之终止复制代码
docker exec
# 后台运行docker run -dit ubuntu# 查看容器状态docker container ls# 进入容器,没有分配伪终端,没有Linux命令提示符,但是命令执行结果可以返回docker exex -i [Container Id or Names] bash# 有伪终端,且退出后,容器不会终止docker exec -it [Container Id or Names] bash复制代码

删除容器

# 删除某个stoped状态下的容器, -f 参数 可以删除在运行的容器docker container rm [Container ID or Names]# 删除所有未使用的容器docker container prune复制代码

导出docker export

导出一个文件系统作为tar归档文件

docker export [OPTIONS] CONTAINERdocker export -o xxx.tar [Container Id or Names]docker export [Container Id or Names] > xxxx.tar# 查看正在运行的容器docker psCONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                    PORTS               NAMESa48f77b6b5c5        swoft/swoft         "docker-php-entrypoi…"   16 hours ago        Exited (0) 16 hours ago                       loving_wingdocker export a48f77b6b5c5 > swoft.tar 复制代码

从归档中创建镜像docker import

docker import [options] file|url|- [Registory[:tag]]docker import swoft.tar depzy/swoft:v1# 从我们创建的容器快照中导入到本地镜像库中docker image lsREPOSITORY          TAG                 IMAGE ID            CREATED             SIZEdepzy/swoft         v1                  6e8c59c426a2        7 seconds ago       465MBswoft/swoft         latest              ab82de1dcd2c        30 hours ago        470M复制代码

Docker仓库

需要注册自己的DockerId,注册完成后登陆

推送到远程仓库docker push

docker push 用户名/仓库名:标签复制代码

私有仓库

数据管理

数据卷

一个可供一个/多个容器使用的特殊目录,绕过UFS

  • 可以容器之间共享使用
  • 修改立即生效
  • 更新不会影响镜像
  • 默认一直存在,不会自动删除
创建数据卷
docker volume create 名称docker volume ls# 查看详细信息docker volume inspect 名称 复制代码
启动挂载数据卷的容器
docker run -d -P --name web \# -v my-vol:/webapp \--mount source=my-vol, target=/webapp \training/webapp \python app.py复制代码
删除数据卷
docker volume rm my-voldocke volume prune复制代码

挂载本机文件/目录作为数据卷

-v-mount

docker run -d -P --name web \# -v /src/webapp:/opt/webapp \--mount type=bind,source=/src/webapp,tar=/opt/webapp, readonly \traing/webapp \python app.py复制代码

-v 如果本机没有目录,则会自动创建一个目录 --mount 如果本机没有目录,会报错

readonly 默认可读写,加了readonly后,编程只读


参考Blog

转载地址:http://spfno.baihongyu.com/

你可能感兴趣的文章
org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER
查看>>
Android Canvas drawText实现中文垂直居中
查看>>
PHP多进程编程(2):管道通信
查看>>
【HTML5】Canvas和SVG的区别
查看>>
李洪强经典面试题8
查看>>
wireshark怎么抓包、wireshark抓包详细图文教程
查看>>
mysql 源码调试方法
查看>>
Asp.Net微信登录-手机网站APP应用
查看>>
用git管理自己读的书
查看>>
JS 数字转换为大写金额
查看>>
EASYUI 表单(FORM)用法
查看>>
[唐诗]187春思-李白
查看>>
SQL语言 之 事务控制
查看>>
详解C中的volatile关键字【转】
查看>>
tableviewCell的xib中collectionView签协议
查看>>
java基础之导出(Excel)
查看>>
JavaScript之面向对象学习三原型语法升级
查看>>
最新AndroidSDK安装教程
查看>>
【USACO 1.4】Arithmetic Progressions
查看>>
Eclipse linux tools 插件
查看>>