那年那日那朵花

".......(o´ω`o)......"

docker小入门

2016-09-30 15:24 docker

其实吧,这篇文章就是照着官方文档操作。。。。。但是也算自己翻译总结下吧。
官方文档如下: https://docs.docker.com/engine/tutorials/usingdocker/

1. 简要说明一下安装

首先要看看操作系统是否符合要求,一般都是用linux跑,我这使用的是centos。官方要求kernel version 3.10或以上。由于这个原因就直接使用centos7了。可以用下面这个命令查看。

[root@localhost ~]# uname -r
3.10.0-327.28.3.el7.x86_64

然后配置下yum源

vi /etc/yum.repos.d/docker.repo

贴入

[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

之后就是安装了

yum install docker-engine

centos7的特性和centos6差了好多

systemctl enable docker.service

启动

systemctl start docker

设置开机自启动

systemctl enable docker

2. 安装还是相当简单的,接下来让docker跑个web应用看看。

这里的web应用使用python flask,用docker run命令启动容器,docker run命令首先会检查本机上有没有指定的镜像,本地没有会先下载然后启动该镜像的容器。

docker run -d -P training/webapp python app.py

这里有两个参数一个-d 一个-P。-d参数表示docker会以后台守护进程启动该容器,-P参数表示让docker在容器与服务器间随机映射网路端口。training/webapp就是docker镜像了,他是一个别人已经build好的flask 应用镜像。python app.py就是具体让容器执行的指令了。

可以使用 docker ps -a 命令看启动的容器,我这里启动了两个,ID为sad_newton的容器是我指定了网络映射,将容器的5000端口映射到本机的80端口,(5000端口是容器内flask的端口),ID为awesome_swartz的容器就是用刚才的命令启动的。然后我们可以分别在浏览器里访问本机的80 和 32768端口 验证下是否flask启动了。

[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                     NAMES
e5e93f70ebd6        training/webapp     "python app.py"     51 minutes ago      Up 37 minutes       0.0.0.0:80->5000/tcp      sad_newton
7b2fb0c4a60d        training/webapp     "python app.py"     54 minutes ago      Up 54 minutes       0.0.0.0:32768->5000/tcp   awesome_swartz

指定网络端口映射的话使用如下命令,-p参数就是将容器的5000端口映射到本机的80端口

docker run -d -p 80:5000 training/webapp python app.py

然后我看看如何查看容器的日志

[root@localhost ~]# docker logs -f sad_newton
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
192.168.188.1 - - [30/Sep/2016 06:53:27] "GET / HTTP/1.1" 200 -
192.168.188.1 - - [30/Sep/2016 06:53:27] "GET /favicon.ico HTTP/1.1" 404 -
 * Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

docker logs -f 就类似于tail -f一样,可以查看容器的标准输出

然后可以这样查看容器的进程信息

docker top sad_newton

然后是查看一下容器的基本信息

docker inspect sad_newton

容器的起停

docker start sad_newton
docker stop sad_newton
docker restart sad_newton

删除容器,删除的话必须先停止容器

docker rm sad_newton

以上是docker使用过程中最基本的一些操作。

3. 好那就来点实际的。

我准备起个nginx容器来做反向代理。操作很方便,具体如下:

先从docker hub上下载nginx的镜像

docker pull nginx

然后在本地创建存放日志的目录和配置文件,具体的目录结构如下:

[root@server01 docker]# pwd
/root/docker
[root@server01 docker]# tree
.
└── dockernginx
    ├── conf
    │   ├── conf.d
    │   │   └── trans.conf
    │   └── nginx.conf
    └── logs
        ├── access.log
        ├── error.log
        └── nginx.pid

然后是配置文件
nginx.conf

user  nginx;
worker_processes  1;

error_log  /var/log/nginx/error.log warn;
pid        /var/log/nginx/nginx.pid;

events {
    worker_connections  1024;
}

http {
    default_type  application/octet-stream;

    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';

    access_log  /var/log/nginx/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;

    include /etc/nginx/conf.d/*.conf;
}

trans.conf

server {
    listen       80;
    server_name  localhost;


    location / {
        proxy_set_header Host $host:$server_port;
        proxy_set_header X-Forward-For $remote_addr;
        proxy_pass  http://192.168.22.222:8000;
    }


}

然后启动docker容器

docker run -it -p 80:80 -v /root/docker/dockernginx/logs:/var/log/nginx -v /root/docker/dockernginx/conf/conf.d:/etc/nginx/conf.d -v /root/docker/dockernginx/conf/nginx.conf:/etc/nginx/nginx.conf:ro  -d nginx

解释下命令参数

  • p参数:网络端口映射
  • v参数:卷管理 本地宿主机的 /root/docker/dockernginx/logs 映射容器内/var/log/nginx 以及本机/root/docker/dockernginx/conf/conf.d映射容器内/etc/nginx/conf.d
  • d参数:后端运行
  • 上面:ro指的是只读的含义

反向代理就OK了,当然实际环境的话最好把配置文件打进docker镜像里面。

[root@server01 conf.d]# docker ps -l
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                         NAMES
0a64db5178e6        nginx               "nginx -g 'daemon off"   31 minutes ago      Up 31 minutes       0.0.0.0:80->80/tcp, 443/tcp   angry_saha

4. 拾遗

镜像的导入导出
docker save centos:7.3.1611 |gzip > centos_image_7.3.tar.gz
docker load -i centos_image_7.3.tar.gz
批量导入
ls | xargs -i docker load -i {}
导入导出容器(非镜像)
docker import - aaaimage:0.1 < aaacontainer.tar
docker export congtainerID -o ./mypython2.7.tar
批量删除退出状态的容器
docker rm $(docker ps -qf status=exited)

进入容器 docker exec -it containerID bash 或者 sh
退出快捷键 ctrl + p + q

docker网络模式有四种 bridge host none container
使用host网络模式能最大利用主机的网络效率(https://www.kancloud.cn/allanyu/openresty-best-practices/82676)
docker run -d --net=host openresty/openresty

查看容器的磁盘使用情况(docker 的版本需要1.13以上)
docker system df
docker system info

Cloudhu 个人随笔|built by django|

沪ICP备16019452号-1