容器引擎-docker
2016年05月08日

概述

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源。
Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

安装

常用命令

列出所有的容器id

docker ps -l

保存一个容器版本

docker commit <continer_id> <name>

列出所有的容器版本

docker images

容器里运行一个命令

docker run <name> <comand> [options]

杀死所有正在运行的容器

docker kill $(docker ps -a -q)

删除所有已经停止的容器

docker rm $(docker ps -a -q)

删除所有镜像

docker rmi $(docker images -q)

查看docker 版本

docker version

搜索可用的docker镜像

docker search tutorial

下载镜像

docker pull learn/tutorial

创建镜像

cd /
tar -cjf image.tar.bz2 .

导入镜像

cat test.tar.bz2 | docker import - container_name:tag

运行命令 保存在记录列表里

docker run -ti --name 自定义名字 容器名 命令

将一个container固化为一个新的image(commit)

docker commit <container> [repo:tag]

Dockerfile

    FROM ubuntu:14.04
    
    RUN apt-get update && apt-get install -y firefox
    RUN apt-get install -y ttf-wqy-microhei
    
    # Replace 1000 with your user / group id
    RUN export uid=1000 gid=1000 && \
        mkdir -p /home/developer && \
        echo "developer:x:${uid}:${gid}:Developer,,,:/home/developer:/bin/bash" >> /etc/passwd && \
        echo "developer:x:${uid}:" >> /etc/group && \
        echo "developer ALL=(ALL) NOPASSWD: ALL" > /etc/sudoers.d/developer && \
        chmod 0440 /etc/sudoers.d/developer && \
        chown ${uid}:${gid} -R /home/developer
    
    USER developer
    ENV HOME /home/developer
    CMD /usr/bin/firefox

GUI应用

运行firefox

docker run -ti --rm \
       -e DISPLAY=$DISPLAY \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       firefox

如果提示:0无法连接,可以在运行docker命令之前运行xhost +,解除x的访问限制

运行shell

docker run -i -t -v /home/tuser/public:/public <name> /bin/bash

运行360

    #!/bin/bash
    QT_X11_NO_MITSHM=1
    start360
docker run -ti --rm \
       -e DISPLAY=$DISPLAY \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       <container_name> sudo script.sh

运行wps

# 下载deepin容器
docker pull x11docker/deepin
# 交互模式运行bash
docker run -ti x11docker/deepin bash
# 安装wps
apt-get install wps-office
# 退出docker容器
exit
# 查看刚才
docker ps -a 

# 根据上一步获得的容器id,给容器命名
docker commit xxxxx wps
#!/bin/bash
docker run -ti --rm \
       -e DISPLAY=$DISPLAY \
       -v /tmp/.X11-unix:/tmp/.X11-unix \
       --env="QT_X11_NO_MITSHM=1" \
       wps wps

wps 为 word
wpp 为 powerpoint
et 为 excel

后台运行

先创建并进入一个新的被命名为newos的新容器

docker run -it --name newos docker.io/centos   

创建并指定端口号映射

docker run -d -p 8002:80 --name my_ng nginx/centos /bin/bash

启动的时候用/bin/bash可能到时下一次无法启动 可以改成tail -f /var/log/nginx/error.log等前台运行的命令

docker run -it -p 8001:80 --name nginx01 -h nginx ng1 /bin/bash

不用-d参数 也不能直接nginx把ng启动在后台 这样都没法启动容器 用/bin/bash先进入在ctrl p d 放在后台

Ctrl + P + Q退出容器保持后台运行(按住ctrl和P 再按Q),再用 docker ps 进行查看: exit可以直接退出容器

再次进入一个正在运行的容器

docker attach dreamy_ritchie或者用ID 

还有更好的,上面的attach经常会卡主不动

docker exec -it <ContainerName> /bin/bash  
# 上面用attach进入的用exit会退出容器必须用ctrl P Q退出才能继续后台运行,exec的 用exit也不会真正退出容器继续后台运行  用name或id都可以

docker exec -it <ContainerName> Command 
# 是执行完命令就退出放在后台比如 ps -ef 显示内容然后就退出前台  如果要进入容器就用/bin/bash

前提是容器要正在运行 如果不是running就先docker start <ContainerName>

后台运行

以root权限运行shell命令

docker exec -it --user root <container id> /bin/bash

参考链接

相关链接

Dockerfile介绍
http://blog.tankywoo.com/docker/2014/05/08/docker-2-dockerfile.html

http://www.21ops.com/linux/13512.html

运行GUI程序
http://fabiorehm.com/blog/2014/09/11/running-gui-apps-with-docker/
http://www.csdn.net/article/2015-07-30/2825340

在debian9上安装docker
https://www.cnblogs.com/heyangyi/p/8613149.html