概述

Docker是一款针对程序开发人员和系统管理员来开发、部署、运行应用的一款虚拟化平台。Docker 可以让你像使用集装箱一样快速的组合成应用,并且可以像运输标准集装箱一样,尽可能的屏蔽代码层面的差异。Docker 会尽可能的缩短从代码测试到产品部署的时间。

为什么选择Docker

轻量 快速 跨环境

安装docker

centos 环境

  1. yum install docker-io -y
启动
  1. systemcl start docker
设置开机启动

设置开机启动 以后就不用每次运行了

  1. systemctl enable docker

镜像操作

1.介绍

镜像是Docker容器的基石,容器是镜像的运行实例,有了镜像才能启动容器。

  • 父镜像

父镜像提供了一个基本的操作系统环境,例如 centos linux 等等... 用户可以根据需要再上面安装和配置软件

  • 基础镜像

    一个没有任何父镜像的镜像,谓之基础镜像。
  • 镜像ID

所有镜像都是通过一个 64 位十六进制字符串 (内部是一个 256 bit 的值)来标识的。 为简化使用,前 12 个字符可以组成一个短ID,可以在命令行中使用。短ID还是有一定的 碰撞机率,所以服务器总是返回长ID。

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/centos latest 49f7960eb7e4 8 weeks ago 200 MB

这里的IMAGE ID 就是镜像ID

2.获取镜像

你可以从镜像仓库拉去镜像

  1. docker pull [OPTIONS] NAME[:TAG|@DIGEST]
  2. OPTIONS说明:
  3. -a :拉取所有 tagged 镜像
  4. --disable-content-trust :忽略镜像的校验,默认开启

例如 现在要获取centos镜像

  1. [root@localhost ~]# docker pull centos
  2. Using default tag: latest
  3. Trying to pull repository docker.io/library/centos ...

3.列出本地镜像

镜像拉到本地后。我们要查看本底的镜像

  1. docker images [OPTIONS] [REPOSITORY[:TAG]]
  2. OPTIONS说明:
  3. -a :列出本地所有的镜像(含中间映像层,默认情况下,过滤掉中间映像层);
  4. --digests :显示镜像的摘要信息;
  5. -f :显示满足条件的镜像;
  6. --format :指定返回值的模板文件;
  7. --no-trunc :显示完整的镜像信息;
  8. -q :只显示镜像ID

例如现在查看本地镜像

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/centos latest 49f7960eb7e4 8 weeks ago 200 MB
  • IMAGE ID 其中镜像的 ID 唯一标识了镜像
  • TAG 信息用来标记来自同一个仓库的不同镜像
  • CREATED 表示镜像的创建时间
  • SIZE 镜像大小

4.创建镜像

创建镜像有很多方法,用户可以从 Docker Hub 获取已有镜像并更新,也可以利用本地文件Dockerfile创建一个

  • 修改已有镜像

    下载镜像

    运行并进入镜像做你爱做的事

    推出镜像 并保存修改
  1. [root@localhost ~]# docker pull centos
  2. Using default tag: latest
  3. Trying to pull repository docker.io/library/centos ...
  4. latest: Pulling from docker.io/library/centos
  5. Digest: sha256:b67d21dfe609ddacf404589e04631d90a342921e81c40aeaf3391f6717fa5322
  6. Status: Image is up to date for docker.io/centos:latest
  7. [root@localhost ~]# docker run -ti -d centos
  8. a70ce31c28ee2e31229421baa09c5833980b79d0ae04300e4508922f433c7c5f
  9. [root@localhost ~]# yum update
  10. [root@localhost ~]#docker commit -m "yum uppdate" -a "admin" 0b2616b0e5a8 docker-io/centos:v2

docker commit 从容器创建一个新的镜像

  1. docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
  2. OPTIONS说明:
  3. -a :提交的镜像作者;
  4. -c :使用Dockerfile指令来创建镜像;
  5. -m :提交时的说明文字;
  6. -p :在commit时,将容器暂停。
  • 利用 Dockerfile 来创建镜像

使用 docker commit 来扩展一个镜像比较简单,但是不方便在一个团队中分享。我们可以使用 docker build来创建一个新的镜像。为此,首先需要创建一个 Dockerfile,包含一些如何创建镜像的指令

  • 上传镜像

docker push

5.存出和载入镜像

  • 存出镜像
  1. docker save [OPTIONS] IMAGE [IMAGE...]
  2. OPTIONS说明:
  3. -o :输出到的文件。

将centos镜像存出为centos.tar

  1. [root@localhost ~]# docker save -o centos.tar centos
  2. [root@localhost ~]# ll
  3. 总用量 203376
  4. -rw-------. 1 root root 1241 8 1 17:50 anaconda-ks.cfg
  5. -rw-------. 1 root root 208250880 8 4 04:49 centos.tar
  6. [root@localhost ~]#
  • 载入镜像
  1. docker load [OPTIONS]
  2. OPTIONS说明:
  3. -i, input string Read from tar archive file, instead of STDIN
  4. tar归档文件读取镜像,而不是标准输入流
  5. -q, quiet Suppress the load output
  6. 禁止读入输出

6.移除本地镜像

docker rmi IMAGID

  1. [root@localhost ~]# docker images
  2. REPOSITORY TAG IMAGE ID CREATED SIZE
  3. docker.io/centos latest 49f7960eb7e4 8 weeks ago 200 MB
  4. [root@localhost ~]# docker rmi centos

容器操作

容器的生命周期

  • run 运行容器
  • start/stop/restart 启动容器/终止/重启
  • kill 杀掉一个运行中的容器
  • rm 移除一个已经终止运行的容器
  • pause/unpause 暂停/恢复
  • create 创建一个新的容器但不启动它
  • exec 在运行的容器中执行命令

启动容器有两种方式,一种是基于镜像新建一个容器并启动,另外一个是将在终止状态(stopped)的容器重新启动。

docker run
  1. docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
  2. OPTIONS说明:
  3. -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  4. -d: 后台运行容器,并返回容器ID
  5. -i: 以交互模式运行容器,通常与 -t 同时使用;
  6. -p: 端口映射,格式为:主机(宿主)端口:容器端口
  7. -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  8. --name="nginx-lb": 为容器指定一个名称;
  9. --dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  10. --dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  11. -h "mars": 指定容器的hostname
  12. -e username="ritchie": 设置环境变量;
  13. --env-file=[]: 从指定文件读入环境变量;
  14. --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
  15. -m :设置容器使用内存最大值;
  16. --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  17. --link=[]: 添加链接到另一个容器;
  18. --expose=[]: 开放一个端口或一组端口;

使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。

  1. docker run --name mynginx -d nginx:latest

使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。

  1. docker run -P -d nginx:latest

使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。

  1. docker run -p 80:80 -v /data:/data -d nginx:latest

绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。

  1. docker run -p 127.0.0.1:80:8080/tcp ubuntu bash

使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。

  1. docker run -it nginx:latest /bin/bash
docker start

可以利用 docker start 命令,直接将一个已经终止的容器启动运行。

容器的核心为所执行的应用程序,所需要的资源都是应用程序运行所必需的。除此之外,并没有其它的资源。可以在伪终端中利用 ps 或 top 来查看进程信息。

  1. dockers ps -a
  2. ....
  3. docker start imageid
docker kill
  1. docker kill [OPTIONS] CONTAINER [CONTAINER...]
  2. OPTIONS说明:
  3. -s :向容器发送一个信号
  4. docker kill -s KILL mynginx #杀掉运行中的容器mynginx
docker rm
  1. docker rm [OPTIONS] CONTAINER [CONTAINER...]
  2. OPTIONS说明:
  3. -f :通过SIGKILL信号强制删除一个运行中的容器
  4. -l :移除容器间的网络连接,而非容器本身
  5. -v :-v 删除与容器关联的卷
进入一个运行中的容器

常用的两种

第一种

  1. docker run -ti centos /bin/bash

  2. docker run -ti exec centos /bin/bash

第二种

  1. docker attach 容器id

数据卷

数据卷是一个可供一个或多个容器使用的特殊目录,它绕过 UFS,可以提供很多有用的特性:

  • 数据卷可以在容器之间共享和重用
  • 对数据卷的修改会立马生效
  • 对数据卷的更新,不会影响镜像
  • 卷会一直存在,直到没有容器使用
创建一个数据卷挂载到容器

在用 docker run 命令的时候,使用 -v 标记来创建一个数据卷并挂载到容器里。在一次 run 中多次使用可以挂载多个数据卷

  1. 下面创建一个 web 容器,并加载一个数据卷到容器的 /webapp 目录。
  2. docker run -d -P --name web -v /webapp training/webapp python app.py
挂载一个或多个目录/文件到容器
  1. 挂载一个目录
  2. docker run -tid -v /opt/data:/opt/data centos
  3. 挂载多个目录
  4. docker run -tid -v /opt/data:/opt/data -v /opt/log:/opt/log centos
  5. 挂载一个文件到容器
  6. docker run -tid -v /opt/conf.cfg:/opt/conf.cfg centos

挂载文件容易出现的问题:

挂载文件后 Permission denied

解决办法:

1.在运行容器的时候,给容器加特权,也就是加上 --privileged=true 参数:

  1. docker run -tid --privileged=true -v /opt/conf.cfg:/opt/conf.cfg centos

2.临时关闭selinux

  1. setenforce 0

3.添加selinux规则,改变要挂载的目录的安全性文本

  1. # 更改安全性文本的格式如下
  2. chcon [-R] [-t type] [-u user] [-r role] 文件或者目录
  3. 选顷不参数:
  4. -R :连同该目录下癿次目录也同时修改;
  5. -t :后面接安全性本文的类型字段!例如 httpd_sys_content_t
  6. -u :后面接身份识别,例如 system_u
  7. -r :后面街觇色,例如 system_r
  8. 复制代码
  9.   根据格式我们需要更改/data/share/master的安全性文档
  10. chcon -Rt svirt_sandbox_file_t /data/share/master

网络操作

外部访问容器

容器中可以运行一些网络应用,要让外部也可以访问这些应用,可以通过 -P 或 -p 参数来指定端口映射。

当使用 -P 标记时,Docker 会随机映射一个 49000~49900 的端口到内部容器开放的网络端口。

-p(小写的)则可以指定要映射的端口,并且,在一个指定端口上只可以绑定一个容器。支持的格式有ip:hostPort:containerPort | ip::containerPort | hostPort:containerPort。

  1. docker run -p 127.0.0.1:80:80 ...
  2. docker run -p 80:80 ...

• 映射所有接口地址

使用 hostPort:containerPort 格式本地的 5000 端口映射到容器的 5000 端口,可以执行

  1. $ sudo docker run -d -p 5000:5000 ...
  2. # 此时默认会绑定本地所有接口上的所有地址。

• 映射到指定地址的指定端口

ip:hostPort:containerPort 格式指定映射使用一个特定地址

  1. docker run -p 127.0.0.1:80:80 ...

• 映射到指定地址的任意端口

ip::containerPort 绑定 localhost 的任意端口到容器的

  1. docker run -d -p 127.0.0.1::5000

• 查看映射端口配置

  1. # docker port CONTAINER [PRIVATE_PORT[/PROTO]]
  2. docker port centos 80

【Docker】docker 入门以及一些常用指令的更多相关文章

  1. docker基础——关于安装、常用指令以及镜像制作初体验

    为什么使用docker docker就是一个轻量级的虚拟机,他解决的是服务迁移部署的时候环境配置问题.比如常见的web服务依赖于jdk.Tomcat.数据库等工具,迁移项目就需要在新的机器重新配置这些 ...

  2. docker创建image方法以及常用指令介绍

    docker -help    # 显示帮助 docker COMMAND -help    # 帮助信息更详细 docker start “容器名称”    # 启动一个或多个容器 docker s ...

  3. 新人成长之入门Vue.js常用指令介绍(一)

    写在前面 作为一个刚步入职场工作的新人,对于公司中所用的技术和框架基本上不懂,只能从最基础的开始做起,进入公司接触的第一个框架就是前端框架Vue.js,几个功能做下来,觉得Vue.js首先学习起来真的 ...

  4. Vue入门---安装及常用指令介绍

    1.安装 BootCDN----官网https://www.bootcdn.cn/ <script src="https://cdn.bootcss.com/vue/2.6.10/vu ...

  5. Docker的使用初探(一):常用指令说明

    目录 Docker的使用初探(一):常用指令说明 为什么要用Docker Docker的安装与简单使用 国内镜像加速 常用指令 Docker的使用初探(一):常用指令说明 前几个星期实践的了,再不记录 ...

  6. Docker Compose 配置文件常用指令

    Docker Compose 配置文件常用指令 YAML文件格式及编写注意事项 YAML是一种标记语言很直观的数据序列化格式,可读性高.类似于XML数据描述语言,语法比XML简单的很多. YAML数据 ...

  7. Centos7 docker 常用指令

    Docker 运行在 CentOS 7 上,要求系统为64位.系统内核版本为 3.10 以上 一.docker的安装及卸载 1.查看当前系统内核版本: [root@docker ~]# uname - ...

  8. Docker的入门及常用命令

    Docker入门及常用命令 1. 各个容器之间是相互隔离状态: 这样减少了我们软件之间的影响. 2. docker是os层虚拟化架构的一种产品体现, os层虚拟化架构出来的操作系统需要和宿主机操作系统 ...

  9. centos 7 安装docker 常用指令

    什么是docker l  使用最广泛的开源容器引擎 l  一种操作系统级的虚拟化技术 l  依赖于Linux内核特性:Namespace和Cgroups l  一个简单的应用程序打包工具 docker ...

随机推荐

  1. WPF/MVVM快速指引

    简介 最近微软推出了UWA,又是一波新的C#+xaml学习热.好多小伙伴都对MVVM感觉很好奇,但是有些地方也有点难以理解.特意写了这边文章,希望对你有帮助. 这边文章会很长,所以我会用几个例子的形式 ...

  2. 将java开发的wordcount程序提交到spark集群上运行

    今天来分享下将java开发的wordcount程序提交到spark集群上运行的步骤. 第一个步骤之前,先上传文本文件,spark.txt,然用命令hadoop fs -put spark.txt /s ...

  3. 手机uc不支持伪元素使用animation动画;移动端background-attachment:fixed不兼容性

    20170503 1.手机uc不支持伪元素使用animation动画 (暂未解决) 2.移动端background-attachment:fixed不兼容性,没有任何效果, element:befor ...

  4. 【转】Base64算法详解

    原文链接:https://blog.csdn.net/robertcpp/article/details/51628647 完整的BASE64定义可见RFC 1421和RFC 2045.编码后的数据比 ...

  5. 弱网络模拟测试工具---易测app

    易测功能介绍   易测是一款基于无线客户端研发场景的通用测试工具, 它通过在研发人员的自持机上提供各种辅助能力&标准化的专项测试服务来提升研发质量&效率.   易测app是阿里巴巴做的 ...

  6. python 锁 信号量 事件 队列

    什么是python 进程锁? #同步效率低,但是保证了数据安全  重点 很多时候,我们需要在多个进程中同时写一个文件,如果不加锁机制,就会导致写文件错乱 这个时候,我们可以使用multiprocess ...

  7. 《Unix网络编程卷1:套接字联网API》读书笔记

    第一部分:简介和TCP/IP 第1章:简介 第2章:传输层:TCP.UDP和SCTP TCP:传输控制协议,复杂.可靠.面向连接协议 UDP:用户数据报协议,简单.不可靠.无连接协议 SCTP:流控制 ...

  8. UIScrollView 在手指点击的坐标处放大

    写了一个extension,如下: extension UIScrollView{ ///在ScrollView上的某个点放大 func zoomWithPoint(var zoomPoint:CGP ...

  9. Python敏感地址扫描和爬取工具

    0×01 说明: 为了方便信息安全测评工作,及时收集敏感地址(初衷是爬取api地址),所以写了这么个小工具.两个简单的功能(目录扫描和url地址爬取). 0×02 使用参数: python spide ...

  10. 【基础】一个简单的MVC实例及故障排除

    Controller: public ActionResult Index() { string setting = "ApplicationServices"; var conn ...