《Docker 技术入门与实践》读书笔记

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Acoolbest/article/details/87855506

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"
CSDN方法:守护态运行docker容器https://blog.csdn.net/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
 

猜你喜欢

转载自blog.csdn.net/Acoolbest/article/details/87855506