docker操作笔记
1、查看docker版本:docker info /docker version
2、使用 docker run 命令来在容器内运行一个应用程序。如输出helloworld:docker run ubuntu:15.10 /bin/echo "Hello world"
各个参数解析:
docker: Docker 的二进制执行文件。
run:与前面的 docker 组合来运行一个容器。
ubuntu:15.10指定要运行的镜像,Docker首先从本地主机上查找镜像是否存在,如果不存在,Docker 就会从镜像仓库 Docker Hub 下载公共镜像。
/bin/echo "Hello world": 在启动的容器里执行的命令
以上命令完整的意思可以解释为:Docker 以 ubuntu15.10 镜像创建一个新容器,然后在容器里执行 bin/echo "Hello world",然后输出结果。
3、运行交互式容器
命令:docker run -i -t ubuntu:15.10 /bin/bash
参数解析: -t:在新容器内指定一个伪终端或终端。
-i:允许你对容器内的标准输入 (STDIN) 进
运行exit命令或者使用CTRL+D来退出容器
4、启动容器(后台模式)
查看是否有容器在运行:docker ps -d: 后台运行容器,并返回容器ID
停止容器:docker stop id
注意:
CONTAINER ID:容器ID
NAMES:自动分配的容器名称
在容器内使用docker logs命令查看容器内的标准输出
5、docker客户端
查看到docker 客户端的所有命令选项:docker
使用命令 docker command --help 更深入的了解指定的 Docker 命令使用方法
6、使用docker容器运行一个web应用
docker pull training/webapp # 载入镜像
docker run -d -P training/webapp python app.py #在docker容器中运行一个 Python Flask 应用来运行一个web应用
参数说明:
-d:让容器在后台运行。
-P:将容器内部使用的网络端口映射到我们使用的主机上
docker ps #查看正在运行的容器
Docker 开放了 5000 端口(默认 Python Flask 端口)映射到主机端口 32768 上。
docker run -d -p 5000:5000 training/webapp python app.py #通过 -p 参数来设置不一样的端口
7、查看WEB应用程序容器的进程
docker top [ID或者name] #查看容器内部运行的进程
docker inspect [ID或者name] #查看Docker的底层信息。它会返回一个 JSON 文件记录着 Docker 容器的配置和状态信息。
docker start [ID或者name] #启动容器
docker rm [ID或者name] #删除不需要的容器
注意:删除容器时,容器必须是停止状态
8、管理和使用本地 Docker 主机镜像
查看docker镜像:docker images
搜索可用镜像:docker search <image>
拉取镜像:docker pull 镜像名
显示镜像的所有层(layer):docker images --tree
删除一个或多个image:docker rmi <image ID>
docker inspect : 获取容器/镜像的元数据。
9、创建镜像
(1)从已创建的容器中更新镜像,并且提交这个镜像:先使用镜像创建一个容器,查看容器 id,进入容器,修改容器后使用docker commit来提交容器副本
(2)使用 Dockerfile 指令来创建一个新的镜像:创建Dockerfile 文件,其中包含一组指令来告诉 Docker 如何构建我们的镜像,使用 Dockerfile 文件,通过 docker build 命令来构建一个镜像,语法:docker build -t 要创建的目标镜像名 Dockerfile文件路径
使用新的镜像创建容器:docker run -t -i ermao/centos:6.7 /bin/bash
添加镜像标签:docker tag 860c279d2fec ermao/centos:dev
860c279d2fec是镜像Id ,用户名称、镜像源名(repository name)和新的标签名(tag)
10、网络端口映射
例:创建一个Python应用的容器:使用-P参数,-P :是容器内部端口随机映射到主机的高端口。-p : 是容器内部端口绑定到指定的主机端口。
11、管理容器
$docker port [ID或者name] #查看端口的绑定情况。
容器命名:使用--name标识
$ docker ps // 查看所有正在运行容器
$ docker stop containerId // containerId 是容器的ID
$ docker ps -a // 查看所有容器
$ docker ps -a -q // 查看所有容器ID
$ docker stop $(docker ps -a -q) // stop停止所有容器
$ docker rm $(docker ps -a -q) // remove删除所有容器
$ docker rm $(docker container ls -f "status=exited" -q) //删除所有停止的容器
$ docker exec -it “容器ID” bash //进入容器shell
12、推送镜像
(1)使用tag命令修改为规范的镜像
(2)在docker hub上创建仓库Public Repository,name应与镜像名一致
(3)推送镜像规范:docker push 注册用户名/镜像名:推送之前要登录
(4)查看自己Hub中是否有该镜像
13、Docker run 命令参数及使用
-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
-d: 后台运行容器,并返回容器ID;
-i: 以交互模式运行容器,通常与 -t 同时使用;
-t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
--name="nginx-lb": 为容器指定一个名称;
--dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
--dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
-h "mars": 指定容器的hostname;
-e username="ritchie": 设置环境变量;
--env-file=[]: 从指定文件读入环境变量;
--cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定CPU运行;
-m :设置容器使用内存最大值;
--net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
--link=[]: 添加链接到另一个容器;
--expose=[]: 开放一个端口或一组端口;
14、创建私有仓库
(1)docker pull registry:latest 拉取私有仓库镜像
(2)docker run -d -p 5000:5000 -v /opt/docker/registry:/tmp/registry registry 启动容器,并将registry的容器存储images的文件夹映射到宿主server的/opt/docker/registry文件夹。(172.18.0.102)
(3)给要Push的镜像打标签:docker tag nginx 172.18.0.102:5000/nginx
(4)在172.18.0.253的”/etc/docker/“目录下daemon.json文件中写入:{ "insecure-registries":["172.18.0.102:5000"] }
(5)重启docker
(6)push镜像:docker push 172.18.0.102:5000/nginx
(7)其他server下载:docker pull 172.18.0.102:5000/nginx
注:172.18.0.102是仓库
172.18.0.253是用户开发机
查看仓库里有哪些镜像
(1)web端查看
(2)命令行查看