日常使用命令

1.停止所有的container,这样才能够删除其中的images:

docker stop $(docker ps -a -q)

如果想要删除所有container的话再加一个指令:

docker rm $(docker ps -a -q)

2.查看当前有些什么images

docker images

3.删除images,通过image的id来指定删除谁

docker rmi <image id>

想要删除untagged images,也就是那些id为<None>的image的话可以用

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

要删除全部image的话

docker rmi $(docker images -q)

4进入已停止的容器

sudo docker start 容器id
sudo docker exec -i -t 容器id /bin/bash

5. 重命名镜像名

docker tag 镜像id 重命名:tag

6. 重命名容器名

dokcer rename 容器ID mytomcat7:jre7

正文

1)使用第一个交互式容器

sudo docker run -i -t ubuntu /bin/bash

-i 保证容器中STDIN是开启的,保证持久的标准输入

-t 为创建的容器分配一个伪tty终端

综上容器通过-it 提供了一个交互式的shell

1.首先Docker会检查本地是否存在ubuntu镜像,如果没有,docker会连接官方维护的docker hub registry查看hub并下载该镜像

2.随后使用该镜像再内部创建一个交互式的容器

3.登录到该容器中之后,会显示

user@容器id:/#

容器id名就是容器主机名

2)给容器命名

如果不给docker创建的容器指定名称,docker会为其随机指定一个名称

如果要指定特定的名称,使用--name标志来实现

sudo docker run --name spec_name -i -t ubuntu /bin/bash

3)重新启动已经停止的容器

sudo docker start spec_name

也可以通过容器id启动已经停止运行的容器

4)使用守护式容器

sudo docker run --name daemonizer_container -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"

-d 参数 使得容器会在后台运行

5)查看容器内的进程

要查看容器内的进程,使用docker top命令

sudo docker top  daemonizer_container

6)docker 统计信息

利用stats命令,显示一个或者多个容器的统计信息

sudo docker stats daemonizer_container (或后跟空格其他容器)

7) 在容器内部运行进程

利用docker exec命令在容器内部额外启动新进程

容器内运行的进程有两种类型

1.后台任务

2.交互式任务

sudo docker exec -d daemonizer_container touch /etc/new_file

-d标志需要运行一个后台进程,-d标志之后,指定的是在内部执行这个命令的容器名字和要执行的命令

sudo docker exec -i -t daemonizer_container /bin/bash

这里和运行交互式容器一样,在容器内创建一个新的bash会话

8)停止守护式容器

sudo docker stop daemonizer_container

或者通过容器id来停止

sudo docker stop casa123ca23

如果想要查看已经停止的容器

使用

docker ps -a

只查看正在运行的容器

docker ps

9)自动重启容器

由于某种错误而导致容器停止运行,可以通过--restart=always标志,让docker自动重新启动该容器

sudo docker run --restart=always --name daemonizer_container -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done;

10)查看容器具体信息

通过docker inspect 来获取更多的容器信息

sudo docker inspect daemonizer_container

11)删除容器

如果容器已经不再使用,可以使用docker rm命令来删除 (删除前必须保证容器已经停止运行)

删除指定的容器

sudo docker rm 容器id

删除所有容器(注意这里是`(1的左边) 而不是') 

sudo docker rm `sudo docker ps -a -q`

-a 表示列出所有容器

-q 只返回容器的id

`sudo docker ps -a -q` 返回容器id的列表

12)创建一个自定义命名的最基本的容器

sudo docker run -i -t --name container_spec_name ubuntu /bin/bash

13)列出镜像

sudo docker images

如果只查看ubuntu相关镜像

sudo docker images ubuntu

本地的镜像都保存在docker宿主机的/var/lib/docker目录下

可以手动目录查看

也可以用

docker info

查看

14)从Docker hub查找可用镜像

sudo docker search 用户名/仓库名

15)从Docker hub上面拉取镜像

sudo docker pull 仓库
例子
sudo docker pull ubuntu #未指定标签,默认latest标签 或者指定带标签的镜像
sudo docker pull 仓库:tag
例子
sudo docker pull ubuntu:16.04

16)从指定镜像创建容器

sudo docker run -i -t 用户名/仓库名 /bin/bash

容器启动命令:docker run --name 参数1 -p 参数2 -v 宿主机与容器交互的目录文件 -d 后台运行

docker run --name tomcat -p : -v /usr/test:/usr/local/tomcat/webapps/test -d tomcat

参数解释:

--name tomcat 表示上一步安装的镜像名称

-p 8080:8080 表示将容器的8080port映射到本机的8080port端口

-v /usr/test:/usr/local/tomcat/webapps/test 表示将本机下的usr目录下的test文件夹映射到容器tomcat的webapps文件夹下

-d tomcat 表示在后台守护进程的方式启动(不进入后台启动),指定上一步安装的镜像名称

17)构建镜像方法

构建镜像有两种方法

  1. docker commit   #不推荐使用
  2. Dockerfile-->docker build  #推荐

其中Dockerfile支持DSL语法, 由指令和参数组成,支持注释

18)登录Docker hub

sudo docker login

登出

sudo docker logout

19)用Dockerfile构建镜像

mkdir DOCKER
cd DOCKER
touch Dockerfile

编辑Dockerfile

FROM ubuntu:14.04
MAINTAINER jojo "12301@qq.com"
RUN apt-get update && apt-get install -y python
RUN echo "hello,docker"
EXPOSE

每一条指令都会创建一个新的镜像层并对镜像进行提交

20)基于Dockerfile执行docker build构建新镜像

cd DOCKER

跳到Dockerfile目录

sudo docker build -t="jojo/docker_test" .

注意 别忘记 .代表使用当前目录的Dockerfile进行构建

也可以指定具体的Dockerfile位置,使用-f标志

docker build -t="用户名/仓库名" -f path/to/file

21)如果构建中失败

由于docker构建新镜像是分层进行的,即Dockerfile每一次构建过程都会将结果提交为镜像,所以在某step失败后,可根据最近的step容器id(屏幕输出build过程)

调试哪里错了

修改Dockerfile

继续build

sudo docker run -t -i 最近build的容器id /bin/bash

22)docker build 默认利用之前成功构建的镜像层当作缓存,如果要重头构建镜像,确保构建过程不使用缓存可以使用--no-cache标志

sudo docker build --no-cache -t="jojo/docker_test" .

23)查看镜像构建层或者构建历史

使用docker history

sudo docker history 镜像id

查看新构建的xx镜像的每一层以及每一层的Dockerfile指令

24)使用-p选项映射 容器特定的端口到本地的宿主机端口

docker可以通过两种方法在宿主机分配端口

  1. 随机选择32768~61000较大的端口来映射到容器指定的端口上
  2. 指定具体端口号进行映射
sudo docker run -d -p 127.0.0.1:: --name container_name jojo/docker_test

上面的命令会将容器的80端口绑定到本地宿主机的127.0.0.1这个ip的8080端口上

但这会限制Docker的灵活性,因此docker 还提供了一个更简单的方式,即-p参数,该参数可以用来对外公开在Dockerfile中通过EXPOSE指令公开的所有端口

25)查看宿主机与容器的映射关系

docker ps -l #可以查看端口映射

也可以通过docker port 查看

sudo docker port 容器id 或 容器名

或者

sudo docker port 镜像id 端口号(如80)

26)Dockerfile 指令

1.CMD

用于指定一个容器启动时要运行的命令.类似RUN指令是镜像被构建时要运行的命令,而CMD是指定容器被启动时要运行的命令

sudo docker run -t -i 用户名/仓库名 /bin/bash
相当于
sudo docker run -t -i 用户名/仓库名
+
CMD ["/bin/bash"]

2.WORKDIR

在容器内部设置一个工作目录,使得CMD指令会在这个目录下执行

WORKDIR /opt/webapp/db
RUN bundle install
WORKDIR /opt/webapp #最终工作目录设置为 /opt/webapp
CMD ["rackup"]

也可以通过-w标志在运行时覆盖工作目录

sudo docker run -t -i /var/log ubuntu pwd

该命令会将容器内的工作目录设置为/var/log

3.ENV

ENV指令用在镜像构建中设置环境变量

ENV RVM_PATH /home/rvm/

RVM_PATH即为一个环境变量

ENV TARGET_DIR /opt/app
WORKDIR $TARGET_DIR

也可以通过-e标志在运行时来传递环境变量

sudo docker run -t -i -e "WEB_PORT=8080" ubuntu env

这些环境变量也会被持久化保存到 我们的镜像创建的任何容器中

在容器终端中运行env命令

可以查看环境变量

4.VOLUME

VOLUME指令用来向基于镜像创建的容器添加卷

  1. 卷可以在容器间共享和重用
  2. 一个容器可以不是必须和其他容器共享卷
  3. 对卷的修改是立即生效的
  4. 对卷的修改不会对更新镜像产生影响
  5. 卷会一直存在直到没有任何容器再使用

5.ADD

ADD指令用来将构建环境下的文件和目录复制到镜像中

文件复制

ADD source_file  target_file/to/path/source_file #构建目录下的source_file复制到镜像target_file/to/path/

目录复制

ADD source_file/to/path/  target_file/to/path/  #源文件目录位置 目的文件目录位置

指向源文件的位置参数可以试一个URL,或者构建上下文或者环境文件名或者目录

不能对构建目录或者上下文之外的文件进行ADD操作

使用URL作为文件源

ADD http://wordpress.org/latest.zip /root/wordpress.zip

另外如果将一个归档文件(gzio,bzip2,xz)制定为源文件,docker会自动将归档文件解开(unpack)

ADD latest.tar.gz /var/www/wordpress/

但docker不知道URL方式指定源位置中使用归档文件(书中所说,不确定现在是否更新)

6.COPY

COPY与ADD相似,不同的是COPY只关心在构建上下文中复制本地文件,而不会去做提取和解压工作,相当于缩水版ADD

同时COPY的复制路径必须是一个绝对路径,并且源路径必须以"/"结尾,这样docker会认为它是目录,如果目录不存在,docker会自动化递归的创建所需要的目录结构 相当于

mkdir -p  #递归的创建目录

 27)push 镜像到docker hub

这里按照书上步骤遇到了denied: requested access to the resource is denied问题

镜像构建完毕的时候 准备传入自己hub发现 被拒绝

报了denied: requested access to the resource is denied异常,意思是没有权限

解决的办法是:使用 docker tag改名字

docker tag REPOSITORY名字 dockerhub的"用户名/仓库名"
docker push "用户名/仓库名"

 28)Docker镜像保存save、加载load

(1)查看要要保存的镜像的ID

docker images

(2)保存镜像

docker save 镜像名/镜像id -o /home/wzh/docker/spring-boot-docker.tar

(3)加载镜像

docker load -i spring-boot-docker.tar  

解决方案 参考

https://stackoverflow.com/questions/41984399/denied-requested-access-to-the-resource-is-denied-docker

第一本Docker书读书笔记的更多相关文章

  1. 我的第一本docker书-阅读笔记

    花了三四天看完了我的第一本docker书,话说书写的还是挺简单易懂的.与传统的VM,VirtualBox,或者与那种内核虚拟的xen,kvm相比,docker作为一种容器的虚拟方式,以启动进程的方式来 ...

  2. 第一本docker书 学习笔记(二)

    #安装docker的先决条件 运行64位CPU构架的计算机(docker目前不支持32位的cpu) 运行LUFSinux3.8或者更高版本内核 内核必须支持一种合适的存储驱动,例如: device M ...

  3. 第一本docker书 学习笔记(一)

    Docker的核心组件: Docker客户端和服务端 Docker镜像 Registry Docker容器 # Docker客户端和服务端 docker 是一个 C/S架构程序.客户端只需要向dock ...

  4. 《第一本docker书》—— 读后总结

    关于docker 这本书其实并没有读完,只不过最近工作比较繁忙,也无心再看这些用不到的书.以后要是工作需要,再仔细学习吧. 这次的阅读算是达到目的了,对docker有了一定的了解.它的作用.意义以及大 ...

  5. 《第一本docker书》第4章 使用docker镜像和仓库 读书笔记

    docker最底端是一个引导文件系统,即bootfs. 第二层是root文件系统rootfs,位于引导文件系统之上. 在传统的Linux引导过程中,root文件系统会最先以只读的方式加载,当引导结束并 ...

  6. 《第一本docker书》- 第一章笔记

    环境: Ubuntu 14.04.2 LTS (GNU/Linux 3.16.0-30-generic i686) 第一章: 1 Docker客户端和服务器 2 Docker镜像 添加一个文件,执行一 ...

  7. 《第一本Docker书》学习笔记——第4章 使用Docker镜像和仓库

    4.2 列出镜像 使用docker images命令: sudo docker images 本地镜像都保存在Docker宿主机的/var/lib/docker目录下. 也可以在/var/lib/do ...

  8. 《第一本Docker书》学习笔记——第3章 Docker入门

    3.1 确保Docker已经就绪 查看docker是否正常工作: sudo docker info 3.2 运行我们的第一个容器 现在,让我们尝试启动第一个Docker容器.我们可以使用docker ...

  9. 第一本docker书,,持续更新中

    1.查看应用是否在docker中部署成功 需要确认curl已安装 whereis curl sudo apt-get -y install curl curl localhost:8081   如果成 ...

随机推荐

  1. 前端笔记之HTML5&CSS3(中)选择器&伪类伪元素&CSS3效果&渐变背景&过渡

    一.CSS3选择器 CSS3是CSS的第三代版本,新增了很多功能,例如:强大的选择器.盒模型.圆角.渐变.动画.2D/3D转换.文字特效等. CSS3和HTML5没有任何关系!HTML5骨架中,可以用 ...

  2. 设计模式总结篇系列:代理模式(Proxy)

    时代在发展,我们发现,现在不少明星都开始进行微访谈之类的,有越来越多的参与捐赠等.新的一天开始了,首先看下新的一天的日程安排: interface Schedule{ public void weiT ...

  3. MVC基本开发介绍 (1)列表展示

    前言: 现在如果用.net 的解决方案来做网站或者是网站的后台管理系统,MVC 应该是比较流行的. 自从进了新公司后,也一直在用mvc + webapi 来做项目,这里做个分享性的总结,有更好的方法欢 ...

  4. Laravel5.5 邮件驱动使用 SMTP 驱动实现邮件发送

    laravel5.5 邮件驱动 Laravel 支持多种邮件驱动,包括 smtp.Mailgun.Maildrill.Amazon SES.mail 和 sendmail.Mailgun . Mail ...

  5. input中只能写入数字int、float

    input 属性 type="number" <input type="number" min="1" max="100&q ...

  6. Dynamics 365使用代码发送邮件给指定邮箱地址

    摘要: 微软动态CRM专家罗勇 ,回复303或者20190213可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 当然,首先要 ...

  7. 【阿里云】在 Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务

     Windows Server 2016 下使用 FileZilla Server 安装搭建 FTP 服务 一.安装 Filezilla Server 下载最新版本的 Filezilla Server ...

  8. Flutter数据持久化入门以及与Web开发的对比

    对于大部分安卓或者IOS开发人员来说,App的数据持久化可能是很平常的一个话题.但是对于Web开发人员来说,可能紧紧意味着localStorage和sessionStorage. Web开发 loca ...

  9. WPF:间接支持虚拟化的ListBox

    /// <summary> /// 间接实现了虚拟化的ListBox /// 子项必须实现IVisible接口 /// 你可以在IsVisible发生改变时实现一系列自定义动作 /// 比 ...

  10. (办公)json报错的解决问题的小经验.

    经验:一半,一半的查,看那一段报错,当确定这一步的时候,用最笨的方法,用眼去看,出哪里的错误. 看有没有替换特殊字符的方法,去整理.