Image: Docker的文件镜像 Container: 运行的隔离环境 挂载文件
- 运行脚本: /Applications/Docker/Docker\ Quickstart\ Terminal.app/Contents/Resources/Scripts/start.sh
- eval "$(docker-machine env default)"
- 依赖于docker-machine来创建docker的宿主环境
- craete docker-machine create -d virtualbox --virtualbox-memory 2048 machine-name
- 查看环境信息 env docker-machine env default
-d: 后台执行 -e: 环境变量 -e TEST_ENV="env"
start stop ps rm
在Container中执行命令
Usage: docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
Run a command in a running container
-d, --detach=false Detached mode: run command in the background
-i, --interactive=false Keep STDIN open even if not attached
-t, --tty=false Allocate a pseudo-TTY
-u, --user= Username or UID (format: <name|uid>[:<group|gid>])
Example:
$ docker run --name ubuntu_bash --rm -i -t ubuntu bash
$ docker exec -d ubuntu_bash touch /tmp/execWorks
$ docker exec -it ubuntu_bash bash
-
基本: docker logs container_name
-
tail: docker logs -ft container_name
- process: docker top container_name
- 基本信息: docker inspect container_name
-
启动时expose: docker run -p inport:outport
-
查看expose port: docker port inport container_name
需要设置virtualbox开放端口
-p 5000:5000
run --link container-name:db 执行该条命令后,会在该container的/etc/hosts上添加一条到container的解析,如: 172.17.0.31 db 同时它还会产生对应env条目 DB_NAME= DB_PORT= xxx
images, search, pull, rmi
仓库内容: /var/lib/docker/repositories
容器中数据的管理主要通过两种方式:数据卷和数据卷容器。数据卷是一个可供一个或过个容器使用的特殊目录,它可以在容器之间共享和重用、对数据卷的修改会马上生效、对数据卷的更新不会影响镜像,数据卷类似Linux下的对文件或目录进行mount。
- 在docker run 中加入-v可以创建或挂载数据卷:
$ docker run -d --name 'test' -v /data centos:latest /bin/bash 在DockerFile文件中可以通过VOLUME命令来添加数据卷
- 在-v可以挂载本机目录作为数据卷
$ docker run -d --name 'test' -v /shared/data:/data centos:latest /bin/bash 将本机的/shared/data挂载到容器的/data目录,作为数据卷,这种方式可以方便的共享主机的文件,比如一些安装或者检测文件,但是本机的路径必须是绝对路径而且DockerFile不支持这种方式,所以考虑到DockerFile的移植和分享,不要采用此种方式。可以在-v /shared/data:/data后面加上只读、读写等修饰比如 -v /shared/data:/data:ro
- 创建数据卷容器 数据卷容器,就是创建一个正常的容器,然后利用它来提供数据卷供其他容器挂载:
$ docker run -d --name 'test' -v /data centos:latest /bin/bash $ docker run -d --name 'test1' --volumes-from test centos:latest /bin/bash $ docker run -d --name 'test2' --volumes-from test centos:latest /bin/bash 第一行命令创建了一个数据卷容器test,后面两行分别创建两个容器test1和test2,并都挂载了数据卷容器test1,此外,容器可以从其他已经怪哉了数据卷的容器来挂载数据卷,也就是说test1挂载test后,test2可以通过挂载test1得到和上述相同的效果。
$ docker run --volumes-from test -v /shared/backup:/backup centos:latest tar cvf /backup/backup.tar /data 这句话有三个目的:首先挂载数据卷容器test;然后将本机的/shared/backup目录挂载到容器的/backup目录下;容器启动后调用tar命令将数据卷/data的数据打包备份到容器的/backup/backup.tar。通过这三个操作,我们就可以在本机的/shared/backup目录下得到备份文件backup.tar
$ docker run --volumes-from test -v /shared/backup:/backup centos:latest untar xvf /backup/backup.tar /data 恢复实际上就是逆过程,将数据解压并放到数据卷下
Docker的网络的使用包括两大类:外部访问容器和容器之间互联,具体的实现原理可以看下面Docker原理部分。
外部访问容器 通过在容器启动是加入-p或-P来指定端口映射,Docker容器网络通过桥接模式连接到主机,端口映射通过NAT实现:
$ docker run -d --name 'test' -v /shared/data:/data -p 50022:22 -p 50080:80/udp centos:latest /bin/bash 将本地的50022端口映射到容器的22端口,将本地的udp端口50080映射到容器的80端口
容器互联 容器的连接(linking)系统是除了端口映射外,另一种跟容器中应用交互的方式。该系统会在源和接收容器之间创建一个隧道,接收容器可以看到源容器指定的信息。
$ sudo docker run -d --name db training/postgres $ sudo docker run -d -P --name web --link db:db training/webapp python app.py 通过--link name:alias 将web容器连接到db容器,这样可以让容器不用向外部暴露端口,容器之间可以进行安全的交互。
name: image: ports: