Docker笔记

来源:互联网 发布:jdk java se 32w xz 编辑:程序博客网 时间:2024/06/04 18:07

参考文档
① Docker的安装和镜像创建
② Docker的save和export命令的区别
③ 如何在 Fedora 22 上面配置 Apache 的 Docker 容器

一、一个故事
很久以前,有个小小的程序员维护着一台小小的服务器。这个小小的服务器里面运行着一个小小的程序。这个小小的程序有依赖其他很多小小的程序。每当夜幕降临,小小的程序员都担心别人把服务器别人把小小的服务器或者小小的程序依赖的其他小小程序改动了,他那个小小的程序便无法运行了。小小的程序员难以成眠。每次转移、升级,小小的程序员小小的心脏都要蹦出来。

终于,有一天小小的程序员倒下了,灵魂飘忽到一座小小的岛上。小小的岛上住着一个大大的大牛。大大的大牛听说了小小的程序员小小的故事,十分悲伤。大大的大牛开发了docker,并在小小的岛上发着小小的心愿,愿天下程序员不再有悲伤,难过。

二、Docker安装
内核要求3.8+,推荐ubuntu 14.04+。

  • ubuntu环境
sudo apt-get install docker docker.io
  • fedora环境
sudo dnf install docker
  • 权限配置
    默认docker是需要root权限运行。对于笔者来说,每次都要输入sudo和用户密码,这是不可以接受的。将用户附加到组docker即可拥有运行权限。添加命令如下:
sudo usermod -a -G docker zhouyixing

三、Docker镜像

  • pull方式
sudo docker pull ubuntu:14.04
  • 模板方式
    模板下载地址
cat ubuntu-14.04-x86-minimal.tar.gz | sudo docker import - ubuntu:14.04
  • build方式

Dockerfile模板

FROM scratch# https://partner-images.canonical.com/core/ADD ubuntu-trusty-core-cloudimg-amd64-root.tar.gz /# a few minor docker-specific tweaks# see https://github.com/docker/docker/blob/master/contrib/mkimage/debootstrapRUN echo '#!/bin/sh' > /usr/sbin/policy-rc.d \    && echo 'exit 101' >> /usr/sbin/policy-rc.d \    && chmod +x /usr/sbin/policy-rc.d \    \    && dpkg-divert --local --rename --add /sbin/initctl \    && cp -a /usr/sbin/policy-rc.d /sbin/initctl \    && sed -i 's/^exit.*/exit 0/' /sbin/initctl \    \    && echo 'force-unsafe-io' > /etc/dpkg/dpkg.cfg.d/docker-apt-speedup \    \    && echo 'DPkg::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' > /etc/apt/apt.conf.d/docker-clean \    && echo 'APT::Update::Post-Invoke { "rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true"; };' >> /etc/apt/apt.conf.d/docker-clean \    && echo 'Dir::Cache::pkgcache ""; Dir::Cache::srcpkgcache "";' >> /etc/apt/apt.conf.d/docker-clean \    \    && echo 'Acquire::Languages "none";' > /etc/apt/apt.conf.d/docker-no-languages \    \    && echo 'Acquire::GzipIndexes "true"; Acquire::CompressionTypes::Order:: "gz";' > /etc/apt/apt.conf.d/docker-gzip-indexes# enable the universeRUN sed -i 's/^#\s*\(deb.*universe\)$/\1/g' /etc/apt/sources.list# overwrite this with 'CMD []' in a dependent DockerfileCMD ["/bin/bash"]

build命令

sudo docker build -f Dockerfile -t desay:14.04.3

成果检查

zhouyixing@vmach ~ % sudo docker images                                                                                                       15-12-28 11:08[sudo] zhouyixing 的密码:REPOSITORY          TAG                 IMAGE ID            CREATED             VIRTUAL SIZEopm                 14.04               0e30db633767        About an hour ago   520.9 MBdocker.io/ubuntu    14.04               89d5d8e8bafb        2 weeks ago         187.9 MB

四、Docker运行

  • 普通方式
sudo docker run -i -t docker.io/ubuntu:14.04 /bin/bash

简单的运行镜像docker.io/ubuntu:14.04,并以bash方式进入命令行。

  • 端口映射
sudo docker run -it --rm -p 8080:80 -v ~/Workspace/OPM/opm:/root/opm opm:14.04 /bin/zsh

运行镜像opm:14.04,并将主机的8080映射到容器里面的80端口,将主机的~/Workspace/OPM/opm目录挂载到容器里面的/root/opm,并以zsh方式进入命令行。

  • 设备映射
sudo docker run -it --hostname=docker --user=desay --device=/dev/loop0:/dev/loop0 --cap-add SYS_ADMIN desay:14.04.3 /bin/zsh

或者

sudo docker run -it --rm=true --hostname=docker --user=desay --privileged=true --cap-add SYS_ADMIN -v ~/openwrt:/home/desay/openwrt -v ~/packages:/home/desay/openwrt/dl -w /home/desay/openwrt desay:14.04.3 /bin/bash

对于deepin 2015系统,需要手动创建loop节点。命令如下

sudo mknod /dev/loop0 b 7

更多运行方式可以docker --help以及docker run --help查询。

五、镜像提交

镜像运行的过程中,可以通过sudo docker ps -a命令确定CONTAINER ID。通过以下命令提交。

sudo docker commit <CONTAINER ID> > tag:commit

提交后可以通过sudo docker images会看到新提交的images

六、镜像保留

  • 导出模板
    通过sudo docker ps -a命令确定CONTAINER ID。通过以下命令导出。
sudo docker export <CONTAINER ID> > ~/export.tar.gz
  • 镜像保存
sudo docker save <REPOSITORY> > /home/save.tar

七、其他应用

  • tomcat

项目主页

# 安装docker pull tomcat# 运行docker run -p 8080:8080 -v tomcat:latest# 其他# 对于笔者来说,笔者仅仅想要一个web server。# ${WEB_APP_PATH}为web存放路径,首页命名为index.html(或者index.jsp)即可。# 浏览器登陆http://localhost:8080/可验证docker run -p 8080:8080 -v ${WEB-APP}:/usr/local/tomcat/webapps/ROOT tomcat:latest
  • gogs

项目主页

# 安装docker pull gogs/gogs# 建立gogs目录sudo mkdir /gogs# 运行# 注意到/gogs的权限是root。对于笔者来说,git服务器需要开机即运行。所以笔者不会有权限问题。# 将以下命令添加到/etc/profile文件即可。# 10080为网页访问端口。10022为ssh clone端口。docker run --rm=true -p 10022:22 -p 10080:3000 -v /gogs:/data gogs/gogs
0 0
原创粉丝点击