Docker从0开始

安装

参考官网便可。我在Ubuntu-14.04上经过User Guide没有任何问题。 web

Docker神奇的AUFS文件系统


AUFS (AnotherUnionFS in version 1, but advanced multi layered unification filesystem since version 2) implements a union mount for Linux file systems. Developed by Junjiro Okajima in 2006. aufs is a complete rewrite of the earlier Unionfs. It aimed to improve reliability and performance, but also introduced some new concepts, like writable branch balancing, and other improvements - some of which are now implemented in the Unionfs 2.x branch.


执行:docker info能够看到系统级别的信息。以下所示,能够看到docker使用的存储驱动叫aufs。简而言之,AUFS就是一个可堆叠联合文件系统,经过aufs可灵活组装一个目标容器,如在一个只读的操做系统上叠加一个可读可写的应用程序容器,当应用程序执行过程当中发生数据变化,只在可写的容器层发生,这样可实现灵活的容器组装(如替换操做系统层而不影响应用程序层),同时无需像image同样须要保存成一个大文件,节省存储空间。 redis

Containers: 2
Images: 20
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Dirs: 24
Execution Driver: native-0.2
Kernel Version: 3.13.0-24-generic
WARNING: No swap limit support

烦人的sudo

ubuntu下每次执行docker都要输入sudo,比较烦人,可经过以下配置简化 docker

# 添加当前用户到docker用户组里,注意这里的littcai为ubuntu server登陆用户名
sudo gpasswd -a littcai docker
# 重启Docker后台监护进程
sudo service docker restart
# 重启以后,尝试一下,是否生效
docker version
#若还未生效,则系统重启,则生效
sudo reboot


运行

运行一个Redis服务

执行以下命令:运行一个名为common-redis的docker容器,-d表示以daemon方式运行,-p表示将容器内的6379端口映射到宿主主机的6379端口,这样一个最简单的redis服务就建立好了。 shell

sudo docker run --name common-redis -d -p 6379:6379 redis


链接到Redis服务

运行redis-cli命令并link到以前运行的common-redis服务上,-it表示开一个tty终端,提供交互模式,--rm表示自动删除已运行存在的相同image的容器 ubuntu

sudo docker run -it --link common-redis:redis --rm redis sh -c 'exec redis-cli -h "$REDIS_PORT_6379_TCP_ADDR" -p "$REDIS_PORT_6379_TCP_PORT"'


Attach到Container

有时候咱们须要从新进入一个正在运行的container,这里咱们可使用attach命令,其中-i表示以交互方式访问。当须要退出时,需使用ctrl-p + ctrl-q(注意是连续两个指令)而不是exit(exit会致使容器中止)。 tomcat

docker attach -i f2b0ae55d07a



保存修改(new image)

首先用docker ps -a命令查询全部已建立的容器,以下图所示,得知其CONTAINER ID=f2b0ae55d07a

执行以下命令保存镜像,其中-m表示本次提交的注释,-a为author,f2b0ae55d07a为容器ID,ycai/ubuntu-jdk为镜像名称(此处经过前缀方式增长了用户名做为分类,方便查询),v1为tag名。 app

docker commit -m="Basic JDK ENV" -a="ycai" f2b0ae55d07a ycai/ubuntu-jdk:v1

提交成功后,可经过docker images命令查看镜像仓库中是否有刚才保存的镜像,以下图所示
webapp


拷贝文件

拷贝容器内文件到Host ide

sudo docker cp container:/path hostpath


拷贝Host文件到容器内
注:这个操做不修改原来的image内容,而是再它的基础上新建一个image.
sudo docker insert image url path


挂载Host目录到容器中

经过-v参数能够将Host的指定目录mount到目标容器的指定目录,这样就能够直接在Host中修改文件而不用每次都复制到容器中了。 ui

sudo docker run --name tomcat -v /home/user/webapps:/opt/tomcat/webapps ubuntu-tomcat


Docker容器链接

未理解问题

问题:经过-v挂载了Host的一个目录到容器中,然而退出后经过start命令再启动该容器,则Host该目录下的文件变化无法体现到容器中,容器中在该目录下的文件操做没法体现到Host中,及mount失效了。 现象:将容器内挂载目录下的文件删掉,退出容器,再从新启动进入容器,发现目录又被从新mount上了,并且又支持双向同步了,诡异 分析:该目录同时也是Host经过mount方式挂载的一个远端存储,因为Host上mount失效致使三者之间不一样步

相关文章
相关标签/搜索