bingoogolapple.github.io
bingoogolapple.github.io copied to clipboard
Docker学习笔记-基础二
面向产品交付 面向开发环境一致性 面向测试环境一致性 面向运维生产环境一致性 面向自动化、自动化扩容 面向微服务 面向大规模的分布式架构(微信红包)
-
docker search centos
- 搜索镜像
- 官方的叫 镜像名称
- 非官方的叫 用户名/镜像名称
-
docker pull centos
- 获取镜像
- 在 pull 的时候是分层的,一层层下载
-
docker images
- 查看当前系统已经存在的镜像
-
docker rmi 镜像id
- 删除镜像
-
docker run centos /bin/echo 'Hello World'
- 输出 HelloWorld
- 执行 docker run 时会先检查本地是否有 centos 镜像,如果没有会先自动 pull 下来
-
docker ps -a
- 查看所有容器,包括已经停止的容器
-
docker run --name mydocker -it centos /bin/bash
- --name 取名叫 mydocker
- -i 表示让容器终端保持打开状态
- -t 表示让容器开一个伪终端 tty 绑定到标准输入输出上
- -h hostname 指定容器主机名
- docker 容器只能启动指定的一个应用程序,如果要启动多个,需写到脚本中启动脚本
-
ps aux
- 查看 Linux 当前运行的进程
-
docker run -d --name mynginx nginx
- -d 表示让容器在后台运行
-
docker stop 容器id
- 停止容器
-
docker rm 容器id
- 如果容器正在运行,需要先停止容器再删除,也可以通过添加 -f 参数来强制删除正在运行的容器
-
docker run --name test1 -it --rm centos bash
- -rm 运行完后自动删除容器
-
docker ps -l
- 查看最后一个运行的容器
-
docker inspect --format "{{.State.Pid}}" 容器名称/容器id
- 获取容器的 pid
-
docker attach 容器名称/容器id 不建议用这种方式
- yun install -y util-linux
- nsenter --target 容器pid --mount --uts --ipc --net --pid
- in.sh
#!/bin/bash CNAME=$1 CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME) nsenter --targe "$CPID" --mount --uts --ipc --net --pid
-
docker exec -it 容器名称/容器id bash
- 进入已经在运行的容器
- nginx 目录 /usr/share/nginx/html
-
brctl show
-
iptables
-
docker run
- -P 随机映射,好处是端口不会冲突
- docker run -d -P --name mynginx nginx
- -p hostPort:containerPort 可以指定多个
- docker run -d -p 8888:80 --name mynginx nginx
- -p ip:hostPort:containerPort
- -p ip::containerPort
- -P 随机映射,好处是端口不会冲突
-
ip ad li 查看 ip 地址
-
ip ro li 查看路由
Docker 数据管理
数据卷
- docker run -it --name volume-test1 -h nginx-volume-test1 -v /data centos
- -v /data 不建议这种方式
- docker inspect -f {{.Volumes}} volume-test1
- docker run -it --name volume-test1 -h nginx-volume-test1 -v /Users/bingoogol/Desktop/Docker/data:/data centos
- -v src:dst src 和 dst 的后面不能有 /
- -v src:dst:ro 加上 :ro 后就是只读
- -v src文件:dst文件 也可以单独挂载一个文件
- docker inspect -f {{.Mounts}} volume-test1
- docker inspect -f {{.HostConfig.Binds}} volume-test1
数据卷容器
- docker create -v /mnt --name dbcenter centos 创建数据卷容器
- docker run --volumes-from dbcenter --name db1 -it centos bash 创建容器db1,挂载 dbcenter 到 /mnt
- docker run --volumes-from dbcenter --name db2 -it centos bash 创建容器db2,挂载 dbcenter 到 /mnt
- docker volume ls 查看所有的数据盘。在删除容器时,默认docker不会把他的数据盘删除掉
- docker volume ls -f dangling=true 查看已经没有容器使用的数据盘
- docker rm db1 db2 同时删除多个容器
- docker rm -v dbcenter 加上-v参数,在删除容器时,把他的数据盘也一块删除掉
- docker volume inspect 1618a5337ad0193174b7244a405ac2028068c87b0e76753ee635b378397ff963
- docker volume rm 1618a5337ad0193174b7244a405ac2028068c87b0e76753ee635b378397ff963
资源隔离和限制
namespace 资源隔离 cgroup 资源限制
压力测试
wget http://mirrors.aliyun.com/repo/epel-6.repo
FROM centos
ADD epel-6.repo /etc/yum.repos.d/
RUN yum -y install stress && yum clean all
ENTRYPOINT ["stress"]
docker build -t stress . docker run -it -rm stress --cpu 1 后面的 --cpu 1 是 stress 的参数 docker run -it -rm -c 512 stress --cpu 1 street 之前是 docker 容器的参数,-c 默认是 1024 docker run -it -rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0
私有仓库 Docker Registry
docker run -d -p 8080:5000 --name bga-registry registry:2 docker images docker tag nginx localhost:8080/bga-nginx:v1 docker push localhost:8080/bga-nginx:v1 如果提示需要 https,编辑 /etc/sysconfig/docker 在 other_args 参数的最前面添加 --insecure-registry ip地址:端口号 然后再 /etc/init.d/docker restart curl http://localhost:8080/v2/bga-nginx/tags/list 查看本地仓库中的镜像列表 docker images docker rmi localhost:8080/bga-nginx:v1 先删除本机中的镜像 docker pull localhost:8080/bga-nginx:v1 docker run -it --name testregistry localhost:8080/bga-nginx:v1 bash docker stop bga-registry && docker rm -v bga-registry
Docker-Dashboard
手动构建镜像
- docker run --name nginx-man -it centos
yum install -y wget gcc gcc-c++ make openssl-devel
wget https://nginx.org/download/nginx-1.11.8.tar.gz
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre2-10.21.tar.gz
mv *.gz /usr/local/src
cd /usr/local/src
tar zxf nginx-1.11.8.tar.gz
tar zxf pcre2-10.21.tar.gz
cd nginx-1.11.8
useradd -s /sbin/nologin -M www
./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre2-10.21
make
make install
vi /etc/rc.local 最后一行添加 /usr/local/nginx/sbin/nginx
vi /usr/local/nginx/conf/nginx.conf 第一行添加 daemon off; 让 nginx 在前台运行
exit docker commit -m '注释' -a 'bingoogolapple' e887e14cb1e3 bingoogolapple/test:v1
启动 nginx 并让 nginx 在前台运行
nginx -g "daemon off;"
Dockerfile 方式构建
# This is My first Dockerfile
# Version 1.0
# Author: bingoogolapple
# FROM 它的妈妈是谁(基础镜像)
FROM centos
# MAINTAINER 告诉别人,你创造了它(维护者信息)
MAINTAINER bingoogolapple [email protected]
# ADD 往它肚子里放点文件(COPY 文件,会自动解压)
ADD pcre2-10.21.tar.gz /usr/local/src
ADD nginx-1.11.8.tar.gz /usr/local/src
# RUN 你想让它干啥(在命令前面加上 RUN)
RUN yum install -y wget gcc gcc-c++ make openssl-devel && yum clean all
RUN useradd -s /sbin/nologin -M www
# WORKDIR 我是 cd,今天刚化了妆(当前工作目录)
WORKDIR /usr/local/src/nginx-1.11.8
RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre2-10.21 && make && make install
RUN echo "daemon off;" >> /usr/local/nginx/conf/nginx.conf
# VOLUME 给我一个存放行李的地方(目录挂载)
# EXPOSE 我要打开的门是啥(端口)
EXPOSE 80
# ENV 设置环境变量,环境变量的后面一定要加上 :$PATH
ENV PATH /usr/local/nginx/sbin:$PATH
# RUN 奔跑吧,兄弟!(进程要一直运行下去)
CMD ["nginx"]
末尾的 . 是指定 Dockerfile 存放的目录,这里就是当前目录 docker build --tag bingoogolapple/test:v1 . docker build -t bingoogolapple/test:v1 .