Docker笔记
Docker概念
- 镜像(Image)
- 容器(Container):容器是镜像的一个运行实例。
- 仓库(Repository)
- 注册服务器(registry):一个注册服务器上可能有多个仓库,比如ubuntu的仓库,centos的仓库。
- 公共注册服务器中的仓库(Docker Hub)
Docker常用命令
- service docker restart ——(重启docker)
- docker version ——(查看docker是否正常运行)
镜像操作命令
- docker pull ubuntu:14.04 ——(获取镜像,相当于docker pull registry.hub.docker.com/ubuntu:14.04,即从默认的注册服务器Docker Hub Registry中的ubuntu仓库下载标记为14.04的镜像)
- docker images ——(列出本地主机上已有镜像)
- docker tag ubuntu:14.04 myubuntu:14.04 —— (为本地镜像添加新的标签(做标记),使用docker images命令就能看到新命名的镜像,不过它指向的是原来的镜像,只是标签不同)
- docker inspect ubuntu:14.04 —— (查看镜像详细信息)
- docker search nginx —— (在远端仓库中搜索镜像)
- docker rmi ubuntu:14.04 —— (删除镜像,也可以指定镜像id进行删除)
- docker push myimage:0.1 —— (上传镜像到远程仓库)
创建Docker镜像
创建镜像的方法主要有三种:基于已有镜像的容器创建、基于本地模板导入、基于Dockerfile创建。
1.使用已有镜像的容器创建镜像
1.在容器中运行bash应用,然后对容器稍作修改
docker run -it ubuntu:14.04 /bin/bash
[email protected]:/# touch test
[email protected]:/# exit
2.提交新镜像
docker commit -m "Added a new file" -a "Tom" a925cb40b3f0 test:0.1
(-m:信息,-a:作者,后面的是容器id,test:0.1是标识)
3.使用docker images查看
导入和导出镜像
1.导出镜像为tar,这样就可以通过复制tar文件来分析镜像了。
2.导入镜像
docker load --input ubuntu_14.04.tar
容器操作命令
- docker ps -a —— (查看所有容器)
- docker rm a21c0840213e —— (删除容器,指定容器id)
- docker create -it ubuntu:latest —— (根据镜像创建一个容器,此时容器处于停止状态)
- docker start 名字或id —— (启动一个已存在的容器)
- docker run ubuntu /bin/echo 'Hello world' —— (新建并启动一个容器,执行echo,执行完后容器会自动终止。run命令会先检查本地是否存在指定镜像,不存在会从公共仓库下载。)
- docker run -it ubuntu:14.04 /bin/bash —— (启动容器后,启动一个bash终端,然后可以进行交互。使用exit或ctrl+d命令要退出)
- docker run -d …… —— (以后台模式运行)
- docker logs 名称或id —— (查看容器输出)
- docker stop 名称或id —— (停止容器)
- docker restart 名称或id —— (重启容器)
- docker exec -it 名称或id /bin/bash —— (exec命令可以在容器中执行任意命令)
- docker export -o a.tar a —— (导出容器a为a.tar)
- docker import a.tar - test/a:v1.0 —— (导入容器a.tar为test/a,版本v1.0)
- docker run --name aa zookeeper —— (创建并启动新容器,并命名为aa)
端口映射与容器互联
端口映射
docker run -d -P training/webapp python app.py —— (使用大写P参数时,会随机映射49000~49900的端口到内部容器开放的网络端口)
docker run -d -p 5000:5000 training/webapp python app.py —— (使用小写p参数时,可以指定映射的端口)
docker ps命令中可以看到端口映射信息
docker port 名字或id 5000 —— (可以看到容器的5000端口映射到了哪里)
容器互联
使用--link参数可以让容器之间安全地进行交互
docker run -d -P --name web --link db:db training/webapp python app.py
此时,db容器和web容器建立互联关系
Docker数据管理
挂载主机目录或文件作为数据卷(这是修改容器中的配置文件的主要方式)
$ docker run --name some-zookeeper -d -v $(pwd)/zoo.cfg:/conf/zoo.cfg zookeeper
使用-v参数将主机中的$(pwd)/zoo.cfg文件挂载到容器的/conf/zoo.cfg下,这样zookeeper就会读取这个配置并使用。
默认情况下,容器对挂载上去的目录文件具有读写权限,可以通过ro来修改成只读权限。
$ docker run --name some-zookeeper -d -v $(pwd)/zoo.cfg:/conf/zoo.cfg:ro zookeeper
使用Dockerfile创建镜像
例子:(运行java HelloWorld程序)
在当前目录下创建Dockerfile文件,内容如下。(FROM指定基础那个基础镜像,COPY把主机目录下的文件拷贝到镜像中的指定目录,WORKDIR指定接下去命令的工作目录,RUN运行指定命令,CMD用来指定启动容器时默认会执行的命令)
执行以下命令生成镜像
Docker三剑客
Docker machine
docker machine是用来大规模部署docker的。
Docker Compose
docker compose是官方编排工具,可以让用户通过编写一个简单的模板文件,快速地创建和管理基于Docker容器的应用集群。
Docker Swarm
提供集群服务,使用它,用户可以将多个Docker主机封装为单个大型的虚拟Docker主机,快速打造一套容器云平台。
上一篇: Docker 笔记