Docker 常用的命令
l 1, Docker包含三大核心组件--镜像、容器和库。镜像:是一个只读的静态模板。它保存着容器需要的环境和应用的执行代码,可以把镜像看成窗口的代码,当代码 运行起来后就成了一个容器。镜像采用分层机制,每个镜像都是只读的,但是可以将写数据的层通过联合文件系统附加在原有的镜像之上。这种增量式修改使得镜像非常容易存储、传输和更新。新创建的镜像其实也就是对已有的镜像文件进程增删改操作。
1, Docker包含三大核心组件--镜像、容器和库。
from Docker开发实践.pdf http://download.csdn.net/download/xiaochuju526/10124839
镜像:是一个只读的静态模板。它保存着容器需要的环境和应用的执行代码,可以把镜像看成窗口的代码,当代码运行起来后就成了一个容器。镜像采用分层机制,每个镜像都是只读的,但是可以将写数据的层通过联合文件系统附加在原有的镜像之上。这种增量式修改使得镜像非常容易存储、传输和更新。新创建的镜像其实也就是对已有的镜像文件进程增删改操作。
容器:是一个运行时环境,它是一个镜像的运行状态,相对于镜像而言。容器是镜像执行的动态表现。用户可以在容器中运行所想要的程序和服务,而容器就像一个集装箱,它并不关心你运行的到底是什么程序,所有应用的运行方式都一样——创建、开始、停止、重启和销毁;容器也不在乎你在什么样的环境 中运行它,可以在个人电脑、虚拟机 、去服务器、各种操作系统 上运行。容器易于交互、全球传输、易移植、易扩展,非常适合进行软件 开发、软件测试以及软件产品的部署。
库:Docker采用注册服务器来存储和共享用户的镜像,库是某个特定用户存储镜像的目录。通常,一个用可以建立 多个库来保存自己的镜像。从这里可以看出库是注册服务器的一部分,一个个的库组成了一个注册服务器。注册服务器有公共 的和私有的,其中公共的如Docker官方的Docker Hub。注册一个账号,你就可以在里面建立 自己的镜像库。镜像库可以选择开放,也可以选择私有,俟有被允许的组成员才可以访问。
2, Docker的安装
Docker的安装非常容易。目前,Docker支持所有的Linux系统,如Ubuntu\RHEL、Debian等。通过Boot2Docker虚拟工具,在OD X和Windows下也能够运行Docker.
但目前而言,Docker的运行环境也有限制,具体如下。
2-1), 必须是在64位机器上运行,并且目前仅支持x86_64和AMD64,32位系统 暂时不支持。
2-2), 系统的Linux内核必须是3.8或者更新的,内核支持Device Mapper、AUFS、VFS、brtfs等存储格式。
2-3) 内核必须支持cgroups和命名空间。
3, Docker related command and usage
3-1),Docker common command
$docker version
$docker info
$docker help [commandName]
$docker --help
3-2),Container
$docker create [containerName] (create a container)
$docker run [containerName] (create and run a container)(docker run = docker create + docker start )
有两种类型容器------后台型容器;交互性容器
--交互型容器
$docker run -i -t --name=inspect_shell ubuntu /bin/bash (交互型容器) -i 打开容器的标准输入STDIN; -t为容器建立一个命令行终端。 Ctrl+D 退出容器
--后台型容器
$docker run -p [port in container]:[port in physical system] -d [image] [command] (后台型容器)后台运行并映射端口
$docker run --name daemon_while -d ubuntu /bin/sh -c "while true; do echo hello world; sleep 1; done"
--Inspect containers commands:
$docker ps (the running containers)
$docker ps -a (all containers,including the not-running)
$docker ps -l (last created container)
$docker ps -n=2 (last created 2 containers)
--Start/stop container:
$docker start [containerID/containerName]
$docker restart [containerID/containerName]
$docker attach [containerID/containerName] (for 交互性容器, start terminal)
$docker exec -it [containerID/containerName] /bin/bash (for 后台型,start terminal)
http://www.cnblogs.com/520yang/articles/5403548.html
$docker stop [containerID/containerName]
--Delete container:
$docker kill [containerID/containerName]
$docker rm [containerID/containerName] (can only delete not-running container)
$docker rm -f [containerID/containerName] (force delete, can delete running and not-running container)
$sudo docker rm $(sudo docker ps -a -q) (delete all existed containers)
-a means all containers, -q means only list container ID
--Container log:
$docker run -d --name deamon_logs ubuntu /bin/bash -c 'for((i=0;1;i++));do echo $i;sleep 1;done;'
$docker logs -f deamon_logs
$docker logs -f --tail=5 -t deamon_logs (-t means the log generate time)
--Container process:
$docker top [containerID/containerName] (inspect container process)
--Inspect container info:
$docker inspect [containerID/containerName] 查看容器里面的配置信息,包含名字,环境变量,运行命令,主机配置,网络配置和数据卷配置, 可以使用-f 或者--format格式化标志,可以指定部分信息
e.g. 查询容器运行状态: $sudo docker inspect --format='{{.State.Running}}' daemon_while
e.g. 查询容器IP地址: $sudo docker inspect --format='{{.NetworkSettings.IPAddress}}' daemon_while
e.g. 查询多个信息: $sudo docker inspect --format='{{.Name}} {{.State.Running}}' daemon_while
--Import/Export container:
$sudo docker run -i -t --name=inspect_import ubuntu /bin/bash
then modify something, install, configure ...
echo '....' >> test.txt
$sudo docker export inspect_import > my_container.tar (导出容器)
$cat my_container.tar | sudo docker import - imported:container (docker import命令导入本地的tar作为镜像)
$sudo docker images
Besides import local tar file, we can also use a URL to import an online container
$sudo docker import url res:tag
Then can run the image to get our container:
$sudo docker run -i -t --name=inspect_import_new imported:container /bin/bash
3-3),Docker image
Namespace/repository:tag Namespace:Dockerhub注册的用户名 tag:不写默认是latest
$docker images 列出image
$docker image ubuntu* (支持通配符)
$docker search [query]
$docker tag [imageId] [imageName] 给 image 打 tag
$sudo docker run [image]
$sudo docker pull [image]
$docker push [imageName] 把本地 image 上传到 registry 中 (此时会把所有 tag 都上传上去),命名空间就是dockerhub用户名
$docker login
$docker commit [container] [imageName] (从 container 创建 image)
$docker build -t [imageName] [pathToFolder] (从 Dockerfile 创建 image)
--delete image
$sudo docker rmi [image] (delete image)
$sudo docker rmi -f [image] 如果镜像被某个容器所依赖的话
$sudo docker rm $(sudo docker ps -a -q) 删除所有容器
$sudo docker rmi $(sudo docker images -q) 再删除image
4, 创建本地镜像并启动容器的方法有三种
4-1), Import/Export container :
$sudo docker run -i -t --name=inspect_import ubuntu /bin/bash
then modify something, install, configure ...
echo '....' >> test.txt
$sudo docker export inspect_import > my_container.tar (导出容器)
$cat my_container.tar | sudo docker import - imported:container (docker import命令导入本地的tar作为镜像)
$sudo docker images
Besides import local tar file, we can also use a URL to import an online container
$sudo docker import url res:tag
Then can run the image to get our container:
$sudo docker run -i -t --name=inspect_import_new imported:container /bin/bash
4-2), docker commit
$docker run -i -t ubuntu
$apt-get update
$apt-get install sqlite3
$echo '....' >> test.txt
使用commit命令将容器的修改提交到版本库中,形成一个全新镜像
$sudo docker commit -m="message1" --author='xjguo' [containerID/containerName] xjguo/sqlite3:v1
xjguo是命名空间,sqlite3是仓库名,v1是tag
$sudo docker images
$sudo docker push xjguo/sqlite3:v1 (push到dockerhub上)0
使用刚才创建的镜像来构建一个容器并运行
$sudo docker run -t -i xjguo/sqlite3:v1
sqlite -version检验 文本test检验
4-3) DockerFile (recommended)
把对镜像的全部操作写到一个文件中,用docker build从这个文件中创建镜像, 可以透明化,重复利用
DockerFile命令全是大写,后面紧跟着的是参数,具体参考http://blog.csdn.net/i6448038/article/details/50855538
$sudo docker build -t res/test:v1
https://hub.docker.com/
platform team related project (本人公司自用,请忽略这块)
https://github.com/Talend/test-common/tree/master/docker.environment
createDBDockerService=true
# start db connection
createCommandList=192.168.31.20@docker run -d -e PRODUCT_NAME=DI -e MYSQL_ROOT_PASSWORD=Ce*#0Shi -p 3305:3306 --name mysql-5.7-DI_linux_tis kwang/mysql-5.7:1.0,docker run -d -p 5424:5432 --name postgres-9.4-DI_tis_ubu12 kwang/postgres-9.4:1.0,docker run -d -p 3316:3306 -e MARIA_ROOT_PASSWORD=Ce*#0Shi --name mariadb-10.1-DI_tis_ubu12 lwyu/mariadb-10.1:1.0;192.168.31.174@docker run -d -p 49166:22 -p 49167:1521 -e PRODUCT_NAME=DI --name oracle-xe-11g-DI_tis_ubu12 kwang/oracle-xe-11g:1.0
本地启动一个mysql DB:
$docker pull mysql
$docker run --name xjguo_mysql123 -e MYSQL_ROOT_PASSWORD=root1 -p 3333:3306 -d mysql5, Docker Hub
--镜像的分发
$sudo docker login
$sudo docker push xjguo/test1:v1
--自动化构建
登录Docker Hub
--创建注册服务器
Docker Hub 是 Docker 官方的公共仓库服务器,用户在 DockerHub 上只能创建一个私有仓库,这对于有些用户是不够用的,而且 DockerHub 服务器的访问速度也是个很大问题,那么我们希望能在自己本地的服务器上创建一个类似于 DockerHub 仓库服务器供团队使用,这也是可以的。http://blog.csdn.net/hazir/article/details/45129387
更多推荐
所有评论(0)