以下内容均为看官方文档(docs.docker.com)时做的笔记

docker version 查看版本 
docker search 搜索镜像
docker run hello-world   #hello-world是一个镜像,本地没有就自动从仓库下载,不指定tag则默认下载latest
docker ps  只显示正在运行的container
docker ps -a 显示所有container
docker images   查看所有本地镜像
docker run -it centos /bin/bash   #-i为interactive, -t为pseudo-tty
docker run -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"  #-d为使其以进程方式运行在后台,可能过docker ps 查看到其container id
docker logs -f nostalgic_morse 显示容器的标准输出,-f类似于tail -f的使用
docker top nostalgic_morse 查看容器正在运行的进程
docker inspect nostalgic_morse 查看容器的详细信息
docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' nostalgic_morse # -f参数指定只查看某一部分信息
docker stop 停止容器运行
docker start 启动容器
docker run -d -P training/webapp python app.py # -P为映射端口到主机,可通过docker ps -l查看,会看到类似:0.0.0.0:49155->5000/tcp,这里5000就是容器的端口(
Flask),49155是主机端口。
docker run -d -p 80:5000 training/webapp python app.py #-p指定映射端口,80是主机的,5000是container的
docker commit -m "Added json gem" -a "Kate Smith" 0b2616b0e5a8 ouruser/sinatra:v2 #在退出窗口后打包更改过的容器为新的镜像,-m 后描述修改的内容,-a后写修改人
docker run -d -P --name web training/webapp python app.py #--name web 指定容器名为web
docker exec -it [container-id] bash 进入一个正在运行的容器,启动新进程。
docker attach [container-id]进入一个正在运行的容器,使用之前的进程,离开用CTRL-p CTRL-q
docker run -d -P --name web -v /webapp training/webapp python app.py  #-v /webapp挂载数据卷,/webapp是容器里的目录而非主机,可通过docker inspect查看到
docker run -d -P --name web -v /src/webapp:/opt/webapp training/webapp python app.py #指定主机目录:/src/webapp,主机目录也可以是一个name,此时就会自动创建一个此名字的卷。
通过挂载卷可以实现主机和虚拟机、虚拟机之间共享文件。
docker run -d -P --name web -v /src/webapp:/opt/webapp:ro training/webapp python app.py #默认为读写,通过:ro指定为只读
docker volume create -d flocker -o size=20GB my-named-volume  创建一个卷
docker run --rm -it -v ~/.bash_history:/root/.bash_history ubuntu /bin/bash  #挂载一个文件而非一个文件夹
docker save -o jump.tar jump  # 导出jump 镜像
docker load -i jump.tar # 导入镜像



卷容器:
docker create -v /dbdata --name dbstore training/postgres /bin/true   #创建一个一卷容器
docker run -d --volumes-from dbstore --name db1 training/postgres  #在另一个容器里挂载前面创建的卷容器,如果原镜像有/dbdata这个目录,则原目录会被隐藏。
可以使用多个--volumes-from来挂载多个
容器删除后,卷并不会删除,需要删除可用docker rm -v [卷名]
docker volume ls -f dangling=true

容器数据迁移:
docker run --rm --volumes-from dbstore -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /dbdata
docker run -v /dbdata --name dbstore2 ubuntu /bin/bash
docker run --rm --volumes-from dbstore2 -v $(pwd):/backup ubuntu bash -c "cd /dbdata && tar xvf /backup/backup.tar --strip 1"
docker run --rm -v /foo -v awesome:/bar busybox top   #/foo为匿名卷,awesome:/bar为命名卷。当容器删除时,--rm -v /foo会删除/foo,但awesome:/bar不会被删除

制作镜像、上传、删除本地镜像等:
mkdir mydockerbuild ;cd mydockerbuild 

vim Dockerfile
FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install  fortunes -y   #centos也应该用apt-get
CMD /usr/games/fortune -a | cowsay

docker build -t docker-whale .

注册docker账号 ,比如注册的是xllc
docker images
docker tag 7d9495d03763 xllc/docker-whale:latest
划掉部分改成docker images命令查到的id

docker login
docker push xllc/docker-whale  #上传镜像

$ docker rmi -f 7d9495d03763  #通过id删镜像
$ docker rmi -f docker-whale #通过镜像名删

docker run xllc/docker-whale


Dockerfile的语法:
每天行都是这种格式INSTRUCTION statement ,其中INSTRUCTION 都大写
#开头为注释
FROM指定源镜像
MAINTAINER指定维护人
RUN 在镜像中执行命令
VOLUME 挂载数据卷,只能挂载容器卷,不能指定主机目录

有任何疑问请点击留言: 留言板
本文发布于http://wiki.too2.net,转载请联系本人。