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

官网:https://www.docker.com/
相关资料:
1、Docker入门教程 http://dockone.io/article/111
2、Docker_百度百科 http://baike.baidu.com/view/11854949.htm
3、史上最全Docker资料集粹 http://special.csdncms.csdn.net/BeDocker/
4、Docker - 话题精华 - 知乎 http://www.zhihu.com/topic/19950993/top-answers
5、docker 简明教程 | 简果网 http://www.simapple.com/docker-tutorial

Docker与虚拟机比较

作为一种轻量级的虚拟化方式,Docker在运行应用上跟传统的虚拟机方式相比具有显著优势:

  • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
  • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
  • Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
  • Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

(本段摘自《Docker技术入门与实战》)

安装

Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本:

[root@bogon ~]#  uname -r
3.10.0-327.22.2.el7.x86_64

Docker支持以下的CentOS版本:

  • CentOS 7 (64-bit)
  • CentOS 6.5 (64-bit) 或更高的版本

Docker 支持以下的 Ubuntu 版本:

  • Ubuntu Precise 12.04 (LTS)
  • Ubuntu Trusty 14.04 (LTS)
  • Ubuntu Wily 15.10
  • 其他更新的版本……

Linux安装

curl -fsSL https://get.docker.com/ | sh

# daocloud.io 国内镜像
curl -sSL https://get.daocloud.io/docker | sh

该安装包适用于 Ubuntu,Debian,Centos 等大部分主流 Linux 发行版。

CentOS7支持使用yum安装:

yum update
yum install docker

查看文档:
https://docs.docker.com/engine/installation/linux/centos/
http://docs.daocloud.io/faq/install-docker-daocloud

查看版本:

docker version

显示:

Client:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 21:23:11 2016
OS/Arch: linux/amd64 Server:
Version: 1.11.2
API version: 1.23
Go version: go1.5.4
Git commit: b9f10c9
Built: Wed Jun 1 21:23:11 2016
OS/Arch: linux/amd64

为了后面的需要,我们这里下载个ununtu的镜像:

docker search ubutun
docker pull ubutun # 查看所有可用镜像
docker images -a

客户端和守护进程

Docker 的 C/S 模式

docker是C/S架构,使用client与Server通信。

支持三种连接方式:
unix:///var/run/docker.sock
tcp://host:port
fd://socketfd

Docker 守护进程的配置和操作

使用ps -ef | grep docker查看docker进程。

管理docker服务:

service docker start
service docker stop
service docker restart

如使用service docker start实际上是执行了/bin/systemctl start docker.service命令。
建议重启使用:

systemctl daemon-reload
systemctl restart docker.service

docker守护进程的配置和操作模式:
docker -d [OPTIONS]

运行相关:

 -D, --debug=false
-e,--exec-driver="native"
-p,--pidfile="/var/run/docker.pid"

服务器相关:

 -G,--group="docker"
-H,--host=[]
--tls=false

RemoteAPI相关:

    --api-enable-cors=false

存储相关:

 -S,--storage-driver=""
--selinux-enabled=false
--storage-opt=[]

网络设置相关:

 -b,--bridge="" 设置自定义网桥
--bip=""
--dns=[]
--ip=0.0.0.0

启动配置文件:
Ubuntu: /etc/default/docker
CentOS: /etc/sysconfig/docker

如果没有配置文件,可以直接编辑:

vim  /lib/systemd/system/docker.service

里面的ExecStart就是启动配置,默认是:

ExecStart=/usr/bin/docker -H fd://

我们可以加几个配置:

ExecStart=/usr/bin/docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd:// --label name=server_1

然后重启:

systemctl daemon-reload
systemctl restart docker.service # 如果出问题了,可以使用下面命令查看:
systemctl status docker.service

通过ps -ef | grep docker可以查看刚才添加的信息:

[root@localhost ~]# ps -ef | grep docker
root 8262 1 0 23:50 ? 00:00:00 /usr/bin/docker daemon -H tcp://0.0.0.0:4243 -H unix:///var/run/docker.sock -H fd:// --label name=server_1

解决centos7和docker1.9没有配置文件问题 - 建站 - IT精英团
http://www.itnpc.com/news/web/145083113731628.html

Docker 的远程访问

使用第二台安装有docker的服务器做演示。为区分,设置label不同。

修改守护进程默认的启动配置:
默认是:-H fd://
可修改为:-H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock -H fd:// --label name=server_1

可设置多个连接方式。

  • 通过http连接Server:

    curl http://127.0.0.1:2375/info

访问的是服务器127.0.0.1:2375的info接口,返回服务器相关信息。

  • 通过docker客户端访问Server:

    docker -H tcp://127.0.0.1:2375 info

和服务器端一样,客户端也支持三种连接方式,默认是 -H unix:///var/run/docker.sock:
-H unix:///path/to/sock
tcp://host:port
fd://socketfd

docker客户端使用docker info默认访问的是本地Server。可以修改环境变量DOCKER_HOST改变默认连接。命令行直接输入:

export DOCKER_HOST="tcp://127.0.0.1:2375"

127.0.0.1:237可以替换为实际的Server地址。

如果想恢复本地连接,将DOCKER_HOST置空即可:

export DOCKER_HOST=""

Docker容器

容器的基本操作

Docker run IMAGE [COMMOND] [ARG...] 在新的容器中执行命令

该命令每运行一次,就创建了一个新的容器。

docker run ubuntu echo 'hello world' 运行一个新的容器,并执行命令echo
docker run -i -t --name test ubuntu /bin/bash 以交互式终端运行一个新的容器,镜像是ubuntu,使用bash,容器别名test

-i 交互式界面,默认是false
-t 伪终端,默认false
--name 容器别名,默认随机命名

exit 退出交互式界面,容器停止运行
Crtl+P 或者Crtl+Q 退出交互式界面,容器在后台运行。(注意是大写P和Q)

查看容器:

docker ps           查看正在运行的容器
docker ps -a 查看所有容器
docker ps -l 查看最近一次运行的容器

示例:

[root@localhost ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8c52c83c1903 redis "docker-entrypoint.sh" 2 hours ago Exited (0) 2 hours ago myredis

容器操作:

docker create 容器名或者容器ID 创建容器
docker start [-i] 容器名 启动容器
docker run 容器名或者容器ID 运行容器,相当于docker create + docker start
docker attach 容器名或者容器ID 进入容器的命令行
docker stop 容器名 停止容器
docker rm 容器名 删除容器 docker top 容器名 查看WEB应用程序容器的进程
docker inspect 容器名 查看Docker的底层信息

删除容器时,容器必须是停止状态,否则会报错误。

守护式容器

什么是守护式容器?

  • 能够长期运行
  • 没有交互式会话
  • 适合运行应用程序和服务

启动守护式容器:

docker run -d IMAGE [COMMOND] [ARG...]

-d 让容器在后台运行

后台运行任务:

docker run -d --name d1 ubuntu /bin/sh -c "while true;do echo hello world;sleep 1;done;"
b89b9ce64d34bd202a642c8190428f4776f15e882f138949259722f22120201a

返回了一个守护进程的唯一ID。

查看守护进程的运行情况:

[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b89b9ce64d34 ubuntu "/bin/sh -c 'while tr" 3 minutes ago Up 3 minutes d1 [root@localhost ~]# docker logs -f b89b9ce64d34
hello world
hello world
hello world
hello world
hello world [root@localhost ~]# docker logs -f -t --tail 2 b89b9ce64d34
2016-06-26T10:13:19.786516589Z hello world
2016-06-26T10:13:20.788871572Z hello world
2016-06-26T10:13:21.791921389Z hello world [root@localhost ~]# docker top b89b9ce64d34
UID PID PPID C STIME TTY TIME CMD
root 4156 4148 0 06:05 ? 00:00:00 /bin/sh -c while true;do echo hello world;sleep 1;done;
root 4850 4156 0 06:16 ? 00:00:00 sleep 1
docker logs [-f] [-t] [--tail] 容器名或id       查看容器内WEB应用程序日志

-f --follow=true|false,默认false,一直跟随log变化
-t --timestamps=true|false,默认false,加上时间戳
--tail="all",返回最新多少条日志

在运行的容器中启动新的进程:

docker exec [-d] [-i] [-t] 容器名 [COMMOND] [ARG...]

停止守护式进程:

docker stop 容器名      发送停止信号,等待关闭
docker kill 容器名 直接关闭容器

在容器中部署静态网站

docker run -d -p 80 -i -t ubuntu /bin/bash   主机端口随机
docker run -d -p 8080:80 -i -t ubuntu /bin/bash 主机端口自定义
docker run -d -p 0.0.0.0:80 -i -t ubuntu /bin/bash
docker run -d -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash

-P --publish-all=true|false,默认false
-p --publish=[],自定义端口,将容器内部使用的网络端口映射到我们使用的主机上。

docker run -d -P training/webapp python app.py 后台运行一个容器应用
docker run -d -p 5000:5000 training/webapp python app.py 容器内部的 5000 端口映射到我们本地主机的 5000 端口上
docker port 容器id            查看到容器的端口映射

Nginx部署示例:

# 创建映射端口为80的交互式界面:
docker run -p 80 --name web -i -t ubuntu /bin/bash # 第一次使用更新源
apt-get update # 安装nginx
apt-get install nginx # 安装vim
apt-get install vim whereis nginx
nginx: /usr/sbin/nginx /etc/nginx /usr/share/nginx vim /etc/nginx/conf.d/localhost.conf

发现配置文件在/etc/nginx/conf.d下面:

conf.d/localhost.conf

server {
listen 80;
server_name localhost; location / {
root /var/www/;
index index.html index.htm;
} }

新建个目录:

mkdir -p /var/www/

vim /var/www/index.html

内容随便写。

# 启动nginx
nginx

使用Crtl+P(即Crtl+shift+p)退出容器,并后台运行。
查看:

[root@localhost ~]# docker port web
80/tcp -> 0.0.0.0:32769 [root@localhost ~]# docker top web
UID PID PPID C STIME TTY TIME CMD
root 12123 12113 0 07:14 pts/2 00:00:00 /bin/bash
root 12159 12123 0 07:14 ? 00:00:00 nginx: master process nginx
33 12160 12159 0 07:14 ? 00:00:00 nginx: worker process [root@localhost ~]# curl http://127.0.0.1:32769

正常的话会显示网页内容。

如果exit退出了容器,想开启nginx服务,还可以:

docker start web
docker exec web nginx

Docker镜像

搜索镜像

docker search [-s] IMAGE

下载镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

[root@bogon ~]# docker pull ubuntu:16.04
[root@bogon ~]# docker pull daocloud.io/library/ubuntu:16.04

下载镜像名称其实由三部分组成:daocloud.io/library/ubuntu:16.04
其中其中daocloud.io是注册服务器地址,默认是registry.hub.docker.com;ubuntu是仓库名,16.04是标签名,默认是latest。

查看已下载镜像列表

docker images [-a]

[root@bogon ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
daocloud.io/library/ubuntu 16.04 12543ced0f6f 2 weeks ago 122.4 MB
ubutun latest 12543ced0f6f 2 weeks ago 122.4 MB
daocloud.io/daocloud/dao-2048 latest 6c1ff658e77e 3 months ago 7.598 MB
daocloud.io/daocloud/alpine latest e9f3e32a4303 3 months ago 11.52 MB
daocloud.io/library/centos 7.1.1503 fac97c5c4748 8 months ago 212.1 MB
daocloud.io/daocloud/dao-redis master-init 173a30377d85 13 months ago 190.4 MB

给镜像添加标签

docker tag [OPTIONS] IMAGE[:TAG] [REGISTRYHOST/][USERNAME/]NAME[:TAG]

[root@bogon ~]# docker tag daocloud.io/library/ubuntu:16.04 ubuntu:latest

删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]

# 按标签删除:多个标签,仅会删除当前标签,不会删除镜像
[root@bogon ~]# docker rmi ubuntu:latest
# 按ID删除:直接删除镜像
[root@bogon ~]# docker rmi 12543ced0f6f

选项:
-f, --force 强制删除镜像
--no-prune 不删除untagged parents

导出镜像

docker save [OPTIONS] IMAGE [IMAGE...]

[root@bogon ~]# docker save -o ubuntu_latest.tar ubuntu:latest
[root@bogon ~]# ls -l
-rw-r--r--. 1 root root 128086528 Jun 28 12:39 ubuntu_latest.tar

选项:
-o, --output 写入到文件

导入镜像

docker load --input ubuntu_latest.tar
# 或者
docker load < ubuntu_latest.tar

选项:
-i, --input 从压缩包载入镜像

上传镜像

docker pull [OPTIONS] NAME[:TAG|@DIGEST]

选项:
--disable-content-trust=true 跳过镜像签名

Docker仓库

Docker数据卷及数据卷容器

使用Dockerfile创建镜像

(未完待续)

作者:飞鸿影~

出处:http://52fhy.cnblogs.com/

Docker学习笔记2的更多相关文章

  1. Docker学习笔记 — 配置国内免费registry mirror

    Docker学习笔记 — 配置国内免费registry mirror Docker学习笔记 — 配置国内免费registry mirror

  2. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  3. Docker学习笔记之一,搭建一个JAVA Tomcat运行环境

    Docker学习笔记之一,搭建一个JAVA Tomcat运行环境 前言 Docker旨在提供一种应用程序的自动化部署解决方案,在 Linux 系统上迅速创建一个容器(轻量级虚拟机)并部署和运行应用程序 ...

  4. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  5. Docker学习笔记 - Docker容器内部署redis

    Docker学习笔记(2-4)Docker应用实验-redist server 和client的安装使用 一.获取redis容器(含客户端和服务端) 二.创建服务端容器 1.在终端A中运行redis- ...

  6. docker学习笔记(一)—— ubuntu16.04下安装docker

    docker学习笔记(一)—— ubuntu16.04下安装docker 原创 2018年03月01日 14:53:00 标签: docker / ubuntu 1682 本文开发环境为Ubuntu ...

  7. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  8. docker学习笔记二:常用命令

    docker学习笔记二:常用命令 查看docker常用命令 docker --help 返回结果如下: 其中常用的命令如下: 1.image相关操作 展示所有的image: 删除image: rmi ...

  9. docker学习笔记-1

    docker学习笔记一:安装 mac安装docker docker官方文档上有这么一段话: Because the Docker daemon uses Linux-specific kernel f ...

  10. Docker:学习笔记(1)——基础概念

    Docker:学习笔记(1)——基础概念 Docker是什么 软件开发后,我们需要在测试电脑.客户电脑.服务器安装运行,用户计算机的环境各不相同,所以需要进行各自的环境配置,耗时耗力.为了解决这个问题 ...

随机推荐

  1. 理解OAuth 2.0 -摘自网络

    OAuth是一个关于授权(authorization)的开放网络标准,在全世界得到广泛应用,目前的版本是2.0版.                                      本文对OA ...

  2. 重复安装Lync导致发布拓扑失败

    重复安装Lync会引起发布拓扑错误,主要原因就是Lync在域控服务器写了东西. 在出错日志中看到guid,查资料说到域控的CN=Trusted Services,CN=RTC Service,CN=S ...

  3. 【128】Word中的VBA

    通过查找关键字,然后删除整段文字的实现! Sub 删除查找含关键词的行() Dim KeyWord As String KeyWord = InputBox("请输入关键词(词长不限,中英均 ...

  4. DSp寄存器“是怎么和板子上的”具体地址“一一对应起来的

    转自:http://hzcjustfly.blog.163.com/blog/static/18319712920117191123928/ 最近在学习DSP,今天在开发板TMS320F2808学习例 ...

  5. JavaIO(06)文件复制

    文件复制一般是采用两种方式进行操作: 1:将源文件中的内容全部读取到内存中,并一次性的写入到目标文件中:(不常用这种方式) 2:不将源文件中的内容全部读取进来,而是采用边读边写的方式:   实例01: ...

  6. [iOS微博项目 - 2.4] - 重新安排app启动步骤

    github: https://github.com/hellovoidworld/HVWWeibo   A.app启动步骤 1.加入了授权步骤之后,最先要判断app内是否已经登陆了账号 2.在程序启 ...

  7. mysql show命令集合

    a. show tables或show tables from database_name; -- 显示当前数据库中所有表的名称b. show databases; -- 显示mysql中所有数据库的 ...

  8. CSU1612Destroy Tunnels(强连通)

    Destroy Tunnels 原来早忘记了离散里含有这么一个叫传递闭包的东西 矩阵A的闭包B = A U A^2 U A^3 U ... 所以这里直接如果A[i][j]!= 0,建边i->j跑 ...

  9. 如何在C#中模拟C++的联合(Union)?[C#, C++] How To Simulate C++ Union In C#?

    1 什么是联合? 联合(Union)是一种特殊的类,一个联合中的数据成员在内存中的存储是互相重叠的.每个数据成员都在相同的内存地址开始.分配给联合的存储区数量是“要包含它最大的数据成员”所需的内存数. ...

  10. Linux coredump

    前面写过通过注册信号处理函数定位SEGV问题.其实Linux coredump机制也是比较好的debug手段. 进程由于某种异常或者bug导致在运行过程中异常退出或者中止,有时会产生一个叫做core的 ...