dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
阅读:3830回复:13

docker 入门

楼主#
更多 发布于:2016-03-04 14:01
Docker 是什么?

图片:docker0.jpg


#

图片:docker1.jpg



Docker 优势:
1. 隔离应用依赖;
2. 创建应用镜像并进行复制;
3. 创建容易分发的即启即用的应用;
4. 允许实例简单、快速地扩展;
5. 测试应用并随后销毁它们;

最终要的一点,容器让我们可以专注应用本身功能的开发,而无需关注基础设施、应用部署、管理等等一大堆棘手的问题。

Docker 背后的想法是创建软件程序可移植的轻量容器,让其可以在任何安装了Docker的机器上运行,而不用关心底层操作系统;就像野心勃勃的造船者们创建了集装箱而不需要考虑装在哪种船舶上一样

docker 运行容器流程图
http://www.dwmkerr.com/content/images/2016/04/Flow.png

内容来自:Docker入门实战
http://yuedu.baidu.com/ebook/d817967416fc700abb68fca1

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
沙发#
发布于:2016-03-04 14:11
ubuntu 安装docker
环境
ubuntu 14.04 amd64(desktop)

安装
以下两种方式,选择一种即可;

#安装 docker 最新版本
curl -sSL https://get.docker.com/ | sudo sh
#ubuntu 中叫做lxc-docker
apt-cache show lxc-docker
Package: lxc-docker
Version: 1.7.1
License: Apache-2.0
Vendor: none
Architecture: amd64
Maintainer: support@docker.com
Installed-Size: 0
Depends: lxc-docker-1.7.1
Homepage: https://www.docker.com/
Priority: extra
Section: default
Filename: pool/main/l/lxc-docker/lxc-docker_1.7.1_amd64.deb
Size: 2098
....省略
Description: Linux container runtime
 Docker complements LXC with a high-level API which operates at the process
 level. It runs unix processes with strong guarantees of isolation and
 repeatability across servers.
 Docker is a great building block for automating distributed systems:
 large-scale web deployments, database clusters, continuous deployment systems,
 private PaaS, service-oriented architectures, etc.
Description-md5: 9d78c360b5a71f203d0de41369c7f0a4

安装
apt-get install lxc-docker

验证
docker run -i -t ubuntu /bin/bash
Unable to find image 'ubuntu:latest' locally

latest: Pulling from ubuntu
d3a1f33e8a5a: Pull complete
c22013c84729: Pull complete
d74508fb6632: Pull complete
91e54dfb1179: Pull complete
Digest: sha256:73fbe2308f5f5cb6e343425831b8ab44f10bbd77070ecdfbe4081daa4dbe3ed1
Status: Downloaded newer image for ubuntu:latest

#待续....
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
板凳#
发布于:2016-03-07 14:04
docker 信息
1. docker 版本
docker version
Client version: 1.7.1
Client API version: 1.19
Go version (client): go1.4.2
Git commit (client): 786b29d
OS/Arch (client): linux/amd64
Server version: 1.7.1
Server API version: 1.19
Go version (server): go1.4.2
Git commit (server): 786b29d
OS/Arch (server): linux/amd64

2. 系统信息
docker info
Containers: 12
Images: 11
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 35
 Dirperm1 Supported: true
Execution Driver: native-0.2
Logging Driver: json-file
Kernel Version: 3.16.0-60-generic
Operating System: Ubuntu 14.04.4 LTS
CPUs: 4
Total Memory: 7.505 GiB
Name: ThinkPad-X250
ID: TZCJ:NKFL:GZAU:XC77:UP55:OXJ2:EYII:IPTM:KWWS:KQCG:PWOK:QM6H
WARNING: No swap limit support

3. docker 网络路由
ip route show dev docker0
172.17.0.0/16  proto kernel  scope link  src 172.17.0.1

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
地板#
发布于:2016-03-07 14:07
docker 镜像的相关操作(images)
1. 检索镜像
docker search centos | head -n5
NAME                            DESCRIPTION                                     STARS     OFFICIAL   AUTOMATED
centos                          The official build of CentOS.                   1956      [OK]      
jdeathe/centos-ssh              CentOS-6 6.7 x86_64 / SCL/EPEL/IUS Repos /...   15                   [OK]
jdeathe/centos-ssh-apache-php   CentOS-6 6.7 x86_64 / Apache / PHP / PHP M...   13                   [OK]
million12/centos-supervisor     Base CentOS-7 with supervisord launcher, h...   9                    [OK]

2. 下载镜像  
docker pull centos

3. 列出镜像
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos              latest              0e0217391d41        7 days ago          196.6 MB
hello-world         latest              975b84d108f1        4 months ago        960 B
ubuntu              latest              91e54dfb1179        6 months ago        188.4 MB  

-a
, --all=false Show all images;
--no-trunc=false Don't truncate output;
-q, --quiet=false Only show numeric IDs  

4. 删除镜像
docker rmi hello-world
Error response from daemon: Conflict, cannot delete 975b84d108f1 because the container 61facec858a9 is using it, use -f to force
-f, --force=false Force;
--no-prune=false Do not delete untagged parents  

5. 显示镜像的历史
docker history centos
IMAGE               CREATED             CREATED BY                                      SIZE                COMMENT
0e0217391d41        7 days ago          /bin/sh -c #(nop) CMD ["/bin/bash"]             0 B                
42c2aa730369        7 days ago          /bin/sh -c #(nop) LABEL name=CentOS Base Imag   0 B                
f5079557f135        7 days ago          /bin/sh -c #(nop) ADD file:6389065673f90a5cb6   196.6 MB            
47d44cb6f252        5 months ago        /bin/sh -c #(nop) MAINTAINER The CentOS Proje   0 B    

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
4楼#
发布于:2016-03-07 14:13
docker 启动容器(run)
docker 容器可以理解为在沙盒中运行的进程。这个沙盒包含了该进程运行所必须的资源,包括文件系统、系统类库、shell 环境等等。

但这个沙盒默认是不会运行任何程序的。你需要在沙盒中运行一个进程来启动某一个容器。这个进程是该容器的唯一进程,所以当该进程结束的时候,容器也会完全的停止。

1. 在容器中运行命令
docker run centos echo "hello world"
hello world

2. 在容器中安装新的程序  
docker run centos yum -y install vim

3. 进入交互式容器中
docker run -i -t centos /bin/bash

Note:  在执行yum 命令的时候,要带上-y参数。如果不指定-y参数的话,yum命令会进入交互模式,需要用户输入命令来进行确认,但在docker环境中是无法响应这种交互的。yum 命令执行完毕之后,容器就会停止,但对容器的改动不会丢失
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
5楼#
发布于:2016-03-07 14:15
docker 查看容器(ps)
1. 列出所有正在运行的container  
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES

2. 列出所有的container  
docker ps -a
CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS                          PORTS               NAMES
7f856cb03347        centos              "yum install vim"      2 minutes ago       Exited (1) About a minute ago                       reverent_payne      
f56d4400f6b6        centos              "echo 'hello world'"   4 minutes ago       Exited (0) 4 minutes ago                            sick_jang          

3. 列出最近一次启动的container
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
7f856cb03347        centos              "yum install vim"   3 minutes ago       Exited (1) 2 minutes ago                       reverent_payne    

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
6楼#
发布于:2016-03-07 14:24
docker 使用容器创建新的镜像(commit)
举个栗子:安装vim 保存并创建新的镜像centos-vim
-a, --author="" Author;
-m, --message="" Commit message  

1. 列出容器
docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
5ab4907ed940        centos              "/bin/bash"         4 minutes ago       Up 4 minutes                            cocky_pasteur      

2. 容器中安装vim
yum -y install vim

3. 创建新的镜像
docker commit 5ab4907ed940 centos-vim
ed875b4e0bd4419387ac09c9fa6933c356c8306be8098ce99b3facab79a4d062

4. 列出镜像
docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZE
centos-vim          latest              ed875b4e0bd4        12 seconds ago      321.7 MB
centos              latest              0e0217391d41        7 days ago          196.6 MB
ubuntu              latest              91e54dfb1179        6 months ago        188.4 MB

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
7楼#
发布于:2016-03-07 14:27
docker 对容器的操作(start/stop/kill)
1. 停止正在运行的容器  
docker stop 7f856cb03347
7f856cb03347
#
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
7f856cb03347        centos              "yum install vim"   6 minutes ago       Exited (1) 5 minutes ago                       reverent_payne      

2. 启动容器
docker start 7f856cb03347
7f856cb03347
#
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
7f856cb03347        centos              "yum install vim"   6 minutes ago       Up 2 seconds                            reverent_payne      

3. 杀死正在运行的容器
docker kill 7f856cb03347
7f856cb03347
#
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
7f856cb03347        centos              "yum install vim"   6 minutes ago       Exited (1) 10 seconds ago                       reverent_payne      

4. 重启一个正在运行的容器
docker restart ddc86cc2ff29
ddc86cc2ff29

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
8楼#
发布于:2016-03-07 14:33
docker 获取容器中日志(logs)
这个容器安装了vim
docker logs 7f856cb03347
Loaded plugins: fastestmirror, ovl


Exiting on user cancel  
Loaded plugins: fastestmirror, ovl
省略....
================================================================================
Install  1 Package (+32 Dependent packages)

Total download size: 19 M
Installed size: 63 M
Is this ok [y/d/N]: Exiting on user command
Your transaction was saved, rerun it with:
 yum load-transaction /tmp/yum_save_tx.2016-02-25.09-01.cWu7WT.yumtx
 
#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
9楼#
发布于:2016-03-08 15:39
docker diff 列出容器里面被改变的文件或者目录
列出容器里面被改变的文件或者目录
列表会显示出三种事件,A 增加的,D 删除的,C 被改变的  
docker diff 7f856cb03347
C /run
C /tmp
A /tmp/yum_save_tx.2016-02-25.09-01.cWu7WT.yumtx
C /var
省略....
A /var/lib/yum/rpmdb-indexes/version
C /var/log
A /var/log/yum.log

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
10楼#
发布于:2016-03-08 15:42
docker top 列出容器里面的进程信息
示例:列出容器里面的进程信息
docker top ddc86cc2ff29
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14151               1836                0                   17:08               pts/19              00:00:00            /bin/bash

帮助
docker top --help
Usage:    docker top [OPTIONS] CONTAINER [ps OPTIONS]
Display the running processes of a container


#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
11楼#
发布于:2016-03-08 15:44
docker cp 从容器里面拷贝文件
示例:从容器里面拷贝文件到本地
docker cp ddc86cc2ff29:/etc/passwd /tmp/

帮助
docker cp --help
Usage:    docker cp [OPTIONS] CONTAINER:PATH LOCALPATH|-
               docker cp [OPTIONS] LOCALPATH|- CONTAINER:PATH

Copy files/folders between a container and the local filesystem
Use '-' as the source to read a tar archive from stdin and extract it to a directory destination in a container.
Use '-' as the destination to stream a tar archive of acontainer source to stdout.

示例:从本地拷贝到容器
docker cp Downloads/test.apk 02760be61f32:/usr/share/nginx/html/

#
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
12楼#
发布于:2016-03-08 15:48
docker attach 附加到运行的容器
示例:附加到一个运行的容器
#容器ID
docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
ddc86cc2ff29        centos-vim          "/bin/bash"         4 minutes ago       Up About a minute                       goofy_bardeen      

#附加到容器
docker attach ddc86cc2ff29
#回车键
[root@ddc86cc2ff29 /]#
Note: attach命令允许你查看或者影响一个运行的容器。你可以在同一时间attach同一个容器。你也可以从一个容器中脱离出来,是从CTRL-C。

帮助
docker attach --help
Usage:    docker attach [OPTIONS] CONTAINER

Attach to a running container
  --no-stdin=false    Do not attach STDIN
  --sig-proxy=true    Proxy all received signals to the process
dongnan
总版主
总版主
  • 粉丝52
  • 发帖数2165
  • 铜币13236枚
  • 威望5838点
  • 银元150个
  • 社区居民
  • 最爱沙发
  • 忠实会员
  • 原创写手
13楼#
发布于:2016-03-08 15:51
docker rm 删除容器
补充删除数据卷,详见 https://ywwd.net/read-1186

返回顶部