其实吧,这篇文章就是照着官方文档操作。。。。。但是也算自己翻译总结下吧。
官方文档如下: https://docs.docker.com/engine/tutorials/usingdocker/
首先要看看操作系统是否符合要求,一般都是用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
这里的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使用过程中最基本的一些操作。
我准备起个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
解释下命令参数
反向代理就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
镜像的导入导出
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