docker命令:
CentOS安装docker
yum install -y docker
启动docker
service docker start
查找Ubuntu镜像
docker search ubuntu
获取镜像
docker pull ubuntu
docker pull ubuntu:14.04
docker pull dl.dockerpoll.com:5000/ubuntu
利用镜像创建一个容器,在其中运行bash应用
docker run -t -i ubuntu /bin/bash
利用镜像创建一个容器,输出一句话“hello world”
docker run ubuntu echo 'hello world'
查看镜像信息
docker images
添加一个新的ubuntu:latest镜像标签(tag)如下:
docker tag 原仓库:原标签 新仓库:新标签
docker tag dl.dockerpoll.com:5000/ubuntu:latest ubuntu:latest
删除tag(当镜像ID没有其他tag时,以下命令会彻底删除该镜像)
docker rmi 仓库:标签
强制删除镜像(-f是强制删除,不加-f时,可能会因镜像中有容器存在而导致镜像删除失败)
docker rmi -f 镜像ID
推荐删除镜像方法(先删除容器,再删除镜像)
docker rm 容器ID
docker rmi -f 镜像ID
获取镜像的详细信息
docker inspect 镜像ID
获取镜像的Architecture信息
docker inspect -f {{.Architecture}} 镜像ID
创建镜像(有3种方法):
1、基于已有镜像的容器创建
启动镜像,并再其中传教一个test文件,之后退出
docker run -ti ubuntu:latest /bin/bash
root@容器ID:/# touch test
root@容器ID:/# exit
用docker commit命令提交一个新镜像,可以使用ID或名称来指定容器
docker commit -m "Added a new file" -a "Docker Newbee" 容器ID test
2、基于本地模板导入
推荐使用OpenVZ提供的模板来创建,其下载地址为http://openvz.org/Download/templates/precreated
例如导入一个ubuntu-14.04的模板压缩包
cat ubuntu-14.04-x86_64-minimal.tar.gz | docker import - ubuntu:14.04
3、基于Dockerfile创建
例如,指定Dockerfile 所在路径为 /tmp/docker_builder/ ,并且希望生产镜像标签为 build_repo/first_image
docker build -t build_repo/first_image /tmp/docker_builder/
存出镜像:
存出本地的ubuntu:14.04镜像为文件ubuntu_14.04.tar
docker save -o ubuntu_14.04.tar ubuntu:14.04
载入镜像:
从文件ubuntu_14.04.tar 导入镜像到本地镜像列表
docker load --input ubuntu_14.04.tar
或
docker load < ubuntu_14.04.tar
上传镜像:
docker push NAME[:TAG]
用户在DockerHub网站注册后,可上传自制镜像
例如,用户user上传本地test:latest镜像,先添加新标签user/test:latest,然后用docker push命令上传镜像
docker tag test:latest user/test:latest
docker push user/test:latest
创建容器:
新建容器
docker create -it Ubuntu:latest
启动指定容器
docker start 容器ID
新建并启动容器
例如:命令输出“hello world”,之后容器自动终止
docker run ubuntu /bin/echo 'hello world'
例如:启动一个bash终端,允许用户进行交互
docker run -t -i ubuntu:latest /bin/bash
-t是让docer分配一个伪终端并绑定到容器的标准输出上
-i是让容器的标准输入保持打开
守护态运行
让docker容器在后台以守护态形式运行(添加-d参数实现)
docker run -d ubuntu /bin/bash -c "while true; do echo hello world; sleep 1; done"
优快云方法:守护态运行docker容器https://blog.youkuaiyun.com/mtgege/article/details/78462290
docker run -it -d --name ubuntu_test -p 8088:80 ubuntu
获取容器的输出信息
docker logs 容器ID
终止容器
docker stop [-t|--time[=10]]
docker stop 容器ID
强制终止容器
docker kill 容器ID
查看处于终止状态的容器ID信息
docker ps -a -q
可以通过docker start 来重新启动处于终止状态的容器
docker start 容器ID
docker restart 命令可以将运行态的容器终止,然后再重新启动它
docker restart 容器ID
进入容器:
可以使用docker attach 命令、docker exec 命令、nsenter 工具等
attach命令
docker run -idt --name myname ubuntu
docker attach myname
exec命令
docker exec -ti 容器ID或myname /bin/bash
nsenter工具
找到容器进程的PID
PID=$(docker inspect --format {{.State.Pid}} 容器ID)
通过PID连接容器
nsenter --target $PID --mount --uts --ipc --net --pid
删除容器
docker rm 容器ID
删除运行中的容器
docker rm -f 容器ID
导出容器
docker export 容器ID >test_for_run.tar
导入容器
cat test_for_run.tar | docker import - test/ubuntu:v1.0
生产环境中,推荐使用容器时在容器前段引入HA(高可靠性)机制,例如使用 HAProxy 工具来代理容器访问,
这样在容器出现故障时,可以快速切换到其他容器,还可以自动重启故障容器。
仓库:
例如仓库地址 dl.dockerpoll.com/ubuntu 其中dl.dockerpoll.com是注册服务器(Registry)地址,ubuntu 是仓库名
登录
docker login
登陆成功后,本地目录的 .dockercfg 中将保持用户的认证信息
自动创建(Automated Builds)
用户可通过 Docker Hub 指定跟踪一个目标网站(支持github或BitBucket)上的项目,
一旦项目发现新的提交,则自动执行创建。
使用registry镜像创建私有仓库
docker run -d -p 5000:5000 registry
以上命令会自动下载registry容器,创建本地私有仓库服务。
默认会将仓库创建在容器的/tmp/registry目录下
可通过-v调整镜像文件存放在本地的路径,如下将上传镜像放到/opt/data/registry目录
docker run -d -p 5000:5000 -v /opt/data/registry:/tmp/registry registry
此时本地启动一个私有仓库,监听端口为5000
在容器内挂载两个目录
docker run -idt --name compile -v /root/code_neo64:/root/code_neo64 -v /root/code_nfs64:/root/code_nfs64 -v /home/zhzq/share:/share ubuntu
docker exec -it compile /bin/bash
docker run -idt --name compile -v /root/code_nfs64:/root/code_nfs64 -v /home/zhzq/share:/share ubuntu
docker run -idt --name sshd_ubuntu -p 10022:22 -v /root/code_nfs64:/root/code_nfs64 -v /home/zhzq/share:/share sshd:ubuntu /run.sh
数据卷容器:
创建数据卷容器dbdata
docker run -it -v /dbdata --name dbdata ubuntu
使用 --volumes-from 来挂载 dbdata
docker run -it --volumes-from dbdata --name db1 ubuntu
docker run -it --volumes-from dbdata --name db2 ubuntu
可多次使用 --volumes-from 挂载多个数据卷,也可从已挂载了容器卷的容器来挂载数据卷
docker run -d --name db3 --volumes-from db1 ubuntu
如果要删除一个数据卷,必须在删除最后一个还挂载着它的容器时显示使用docker rm -v 命令来指定同时删除关联的容器
利用数据卷容器迁移数据
备份
docker run --volumes-from dbdata -v $(pwd):/backup --name worker ubuntu tar cvf /backup/backup.tar /dbdata
恢复
docker run -v /dbdata --name dbdata2 ubuntu /bin/bash
dcoker run --volumes-from dbdata2 -v $(pwd):/backup busybox tar xvf /backup/backup.tar
从外部访问容器应用
docker run -d -P ubuntu
-p可指定要映射的端口
映射所有接口地址 hostPort:containerPort
映射到指定地址的指定端口 ip:hostPort:containerPort
映射到指定地址的任意端口 ip::containerPort
查看映射端口配置
docker port
查看映射所绑定的地址
docker port ubuntu 5000
执行 docker run 时若添加 --rm 标记,则容器在终止后会立刻删除。注意, --rm 和 -d 参数不能同时使用
使用 --link 参数可以让容器间安全交互
创建一个新的数据库容器
docker run -d --name db ubuntu
创建一个web容器,并将它连接到db容器
docker run -d -P --name web --link db:db ubuntu