docker 深入浅出
一、如何开始
- 安装docker
yum -y install docker //brew cask install docker systemctl start docker systemctl enable docker.service cat /etc/docker/daemon.json "registry-mirrors": ["https://registry.docker-cn.com"] 国内仓库:https://9cpn8tt6.mirror.aliyuncs.com
安装ps:
apt-get update && apt-get install -y procps - 卸载docker
yum list installed | grep docker yum -y remove docker*
二、基本命令
- web容器
docker port 63 端口映射情况 docker logs -f bf08b7f2cd89 web应用日志 docker top 63 查看内部进程 docker inspect 63 配置状态信息 docker container ls 列出本机正在运行的容器 docker container ls —all 列出本机所有容器,包括终止运行的容器 docker run -d -P training/webapp python app.py docker run -d -p 5000:5000 training/webapp python app.py 容器内部的 5000 端口映射到我们本地主机的 5000 端口上。 docker run -ti b5b /bin/bash 运行进入容器 docker run -tid b5b /bin/bash 后台启动容器 -i: 交互式操作。 -t: 终端。 -d:让容器在后台运行。 -P:将容器内部使用的网络端口映射到我们使用的主机上。
- 镜像
docker search httpd 查询镜像 docker rmi hello-world 删除镜像 docker run -t -i ubuntu:15.10 /bin/bash 创建容器 docker commit -m="creat centos." -a="handsomecui" 5c hbc/centos:v1 提交镜像 docker build -t runoob/centos:6.7 . 根据Dockerfile构建镜像 docker tag 860c279d2fec runoob/centos:dev 打标签 REPOSITORY:表示镜像的仓库源 TAG:镜像的标签(默认last,最新) IMAGE ID:镜像ID
- 网络
docker network create -d bridge test-net 创建网络 -d:参数指定 Docker 网络类型,有 bridge、overlay。 docker network ls 查看 docker run -tid --name test1 --network test-net ef /bin/bash 运行容器连接网络
- dns
/etc/docker/daemon.json "dns" : [ "114.114.114.114", "8.8.8.8" ] docker run -it --rm ubuntu cat etc/resolv.conf 查询是不是生效 docker run -it --rm -h host_ubuntu --dns=114.114.114.114 --dns-search=test.com ubuntu 手动指定dns -h HOSTNAME 或者 --hostname=HOSTNAME: 设定容器的主机名,它会被写到容器内的 /etc/hostname 和 /etc/hosts。 --dns=IP_ADDRESS: 添加 DNS 服务器到容器的 /etc/resolv.conf 中,让容器用这个服务器来解析所有不在 /etc/hosts 中的主机名。 --dns-search=DOMAIN: 设定容器的搜索域,当设定搜索域为 .example.com 时,在搜索一个名为 host 的主机时,DNS 不仅搜索 host,还会搜索 host.example.com。
- 仓库
docker login 登录 docker logout 登出 docker search ubuntu 查询 docker push username/ubuntu:18.04 推送 docker export 1e560fca3906 > es.tar 导出容器快照 docker import es.tar elastic:5.6.8 导入容器快照
- Dockerfile
FROM:定制的镜像都是基于 FROM 的镜像,这里的 nginx 就是定制需要的基础镜像。后续的操作都是基于 nginx。 RUN:用于执行后面跟着的命令行命令。有以下两种格式: 1. RUN <命令行命令> # <命令行命令> 等同于,在终端操作的 shell 命令。 2. RUN ["可执行文件", "参数1", "参数2"] # RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev offline CMD 在docker run 时运行。 RUN 是在 docker build。 ENV 设置环境变量 例: ENV NODE_VERSION 7.2.0 RUN curl -SLO "/node-v$NODE_VERSION-linux-x64.tar.xz" EXPOSE 仅仅只是声明端口 注意: Dockerfile 的指令每执行一次都会在 docker 上新建一层。所以过多无意义的层,会造成镜像膨胀过大。 以 && 符号连接命令,这样执行后,只会创建 1 层镜像。
- machine
docker-machine version docker-machine ls Hyper-V管理器-->新建虚拟交换机-->外部-->命名docker ctrl + i 管理员运行 docker-machine create --driver hyperv --hyperv-virtual-switch=docker manager1
- 批量操作
linux : docker stop $(docker ps -a -q) cmd: docker ps -a -q > 1.txt for /f %a in (1.txt) do docker stop %a
三、实践
- 安装ES
docker run -di --name=elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch:5.6.8