Docker
Docker安装
https://www.cnblogs.com/xishuai/p/ubuntu-install-docker.html
Docker
##################### ubuntu安装docker ##################### 1. 安装前检查 - 内核版本 unamae -a - 检查Device Mapper是否存在 ls -l /sys/class/misc/device-mapper 2. Docker推荐安装 - whereis curl #查看curl命令是否存在 - sudo apt-get install curl - curl -sSL https://get.docker.com/ubuntu/ | sudo sh - sudo docker version 3. 运行一个容器 - sudo decker run ubuntu echo "Hello world" 4. 普通用户不用加sudo - sudo groupadd docker #增加一个用户组 - sudo gpasswd -a ${USER} docker #将当前用户增加到用户组中 - sudo service docker restart #重启服务 - 重新进入shell 5. 创建容器两种方式: - docker run IMAGE [COMMAND] [ARG...] #创建容器的格式 - docker run --name=自定义名 -i -t IMAGE /bin/bash 1. 执行一次就结束 - sudo decker run ubuntu echo "Hello world" 2. 交互式容器 - docker run -i -t IMAGE /bin/bash -i --interactive=true|false #默认是false,接收输入 -t --tty=true|false #默认是false,分配一个伪终端 - docker run -i -t ubuntu /bin/bash 6. 查看容器 1. docker ps -a #查看所有的容器 2. docker inspect 容器id #查看某个容器的详细信息 7. 重启容器 - docker start -i 容器id 8. 守护式容器 - control + Q #退出,容器还在运行 - docker run -d 镜像名 [COMMAND] [ARG...] #启动守护式进程 9. 查看日志 docker logs [-f] [-t] [--tail] 容器名 -f --follow=true|false #默认为false,一直跟踪日志 -t --timestamps=true|false #默认为false,为日志加上时间 --tail #显示多少行日志,默认显示所有日志 10. 在已经运行的容器中启动新进程 - docker exec [-d] [-i] [-t] 容器名[COMMAND] [ARG...] 11. 查看容器中的进程 - docker top 进程id 12. 停止容器 - docker stop 容器id #发送一个信号,等待容器的停止 - docker kill 容器id #直接停止容器 13. 在容器中部署静态网站 - 设置容器的端口映射 - run [-P] [-p] -P --publish-all=True|false #默认为false,为容器暴露所有的端口映射 docker run -P -i -t ubuntu /bin/bash -p --publish=[] docker run -p 80 -i -t ubuntu /bin/bash #只指定容器的端口,宿主机的端口是随机映射的 docker run -p 8080:80 -i -t ubuntu /bin/bash #指定宿主机的端口和容器的端口 docker run -p 0.0.0.0:80 -i -t ubuntu /bin/bash #指定ip和容器的端口 docker run -p 0.0.0.0:8080:80 -i -t ubuntu /bin/bash #指定ip宿主机端口和容器端口 14. 在容器中部署静态网站 - Nginx部署流程 - 创建映射80端口的交互式容器 docker run -p 80 --name web -i -t ubuntu /bin/bash - 安装Nginx apt-get install -y nginx - 安装文本编辑器vim apt-get install vim - 创建静态页面 mkdir -p /var/www/html cd /var/www/html vim index.html <h3>我是一只小小鸟</h3> - 修改Nginx配置文件 whereis nginx ls /etc/nginx/sites-enabled vim /etc/nginx/sites-enabled/default root /var/www/html; #将网站的根目录切换 - 运行Nginx nginx ps -ef control + q - 验证网站访问 docker ps #查看正在运行的进程 docker port web #查看端口映射 docker top web #查看容器中的进程 curl http://127.0.0.1:宿主机端口 - 停止容器 docker stop web - 启动容器 docker start -i web ps -ef #发现重启后并没有nginx control + q docker exec web nginx #在宿主机上启动容器的nginx docker top nginx #但是ip和端口都发生改变
Docker镜像
- 列出本地镜像 - docker images [optsions] [REPOSTITORY] -a --all=False #列出所有镜像 -f --filter=[] #过滤 --no-trunc=false #不截断显示id -q --quiet=false #只显示镜像的唯一id - docker images -REPOSITORY #镜像所属的仓库名 -TAG #镜像所属的标签名 -IMAGE ID #镜像的id名 -CREATED #镜像的创建时间 - 查找远程镜像: 1. Docker Hub的官方网站 https://registry.hub.docker.com 2. docker search [options] TERM --automated=false --no-trunc=false #不截断显示id -s --stars=0 #用来限定显示结果的最低星级 - 拉取镜像 - docker images -a #查看本地有哪些镜像 - docker pull ubuntu:14.04 #拉取镜像 - docker images -a #再次查看 - 推送镜像 - docker push ... - 构建镜像两种方式: - docker commit #通过容器构建 - docker build #通过Dockerfile文件构建 #方式一: - docker commit [options] container [repository[:TAG]] -a #指定作者 -m #详细信息 -p #commit会将正在运行的容器暂停,-p可以将正在运行的容器不暂停 - 事例(构建容器,用于制作镜像): docker run -it -p 80 --name commit_test ubuntu /bin/bash api-get update api-get nginx exit docker ps -l #显示所有镜像 docker commit -a "小小鸟" -m "my nginx" commit_test xxx/commit_test #xxx可以为dockerhub的名字 #方式二: - 事例(通过dockerfile构建镜像): mkdir -p dockerfile/df_test vim dockerfile/df_test/file FROM ubuntu:14.04 MAINTAINER dormancypress .... RUN apt-get update RUN apt-get install -y nginx EXPOSE 80 docker build -t="镜像名称" .
Dockerfile
Dockerfile - #注释 - FROM FROM <image> FROM <image>:<tag> - MAINTAINER MAINTAINER 作者 联系心心 - RUN (镜像构建时运行) RUN <command> (shell模式) RUN ["executable","param1","param2"] (exec模式) - EXPOSE - CMD (容器运行时运行,如果使用 docker run启动一个容器时,如果指定了容器运行时候的命令,那么CMD命令将不再运行) CMD ["executable","param1","param2"] (exec模式) CMD command param1 param2 (shell模式)
Docker 数据卷
- 为容器增加数据卷 docker run -v ~/宿主机目录:/容器目录 -it --name test ubuntu /bin/bash - 为容器增加数据卷加权限 docker run -v ~/宿主机目录:/容器目录:ro -it --name test ubuntu /bin/bash
1、安装 yum -y install docker systemctl start docker docker search centos docker pull centos docker images 2、运行 docker run centos /bin/echo 'Hello World' docker ps -a 3、运行并进入 docker run --name mydocker -t -i centos /bin/bash 4、常用命令 docker ps -a #显示所有运行的容器 docker ps #显示正在运行的容器 docker start 7c44c65cd00a #启动容器 5、进入容器 1)、进入正在运行的容器,退出后终止运行 docker attach b9fa8da3a46f ps axu 2)、退出后容器依然在运行 yum -y install util-linux(nsenter) docker inspect --format "{{.State.Pid}}" b9fa8da3a46f #获取正在运行的容器的pid nsenter -t 14788 -u -i -n -p #进入容器 3)、通过脚本进入 vim in.sh #/bin/sh PID=$(docker inspect --format "{{.State.Pid}}" $1) nsenter -t $PID -u -i -n -p chmod +x in.sh ./in.sh b9fa8da3a46f 6、随机端口映射启动nginx docker pull nginx docker run -d -P --name mynginx1 nginx docker ps -l http://192.168.8.132:32769/ #浏览器访问 docker logs ee2e6673daa8 #查看nginx的日志 7、指定端口映射 docker run -d -p 91:80 --name mynginx2 nginx http://192.168.8.132:91/ 浏览器访问 8、数据卷 docker run -it --name volume-test1 -v /data centos cd /data touch a.txt docker inspect e2a4852dc057 #实体机查看挂载信息,发现在虚拟机/data/目录下创建的文件在实体机中找到 ll /var/lib/docker/volumes/324ab57cad681a0fe657338666bd825c85289222a8b2c1363bbc6a29e4f11930/_data 指定目录挂载 docker run -it --name volume-test2 -h nginx -v /opt:/opt centos 9、数据卷挂载,多个容器可以使用同一个目录 docker run -d --name nfs -v /data centos docker run -it --name test --volumes-from nfs centos #底下容器使用上面容器的磁盘,两者使用同一个 10、手动镜像(安装nginx) docker run --name nginx-man -it centos yum install -y wget gcc gcc-c++ make openssl-devel vim cd /usr/local/src/ wget http://nginx.org/download/nginx-1.9.3.tar.gz wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz useradd -s /sbin/nologin -M www tar zxf pcre-8.39.tar.gz tar zxf nginx-1.9.3.tar.gz cd nginx-1.9.3 && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.39/ make && make install 设置开机启动 vim /usr/local/nginx/conf/nginx.conf daemon off; 退出做镜像 exit docker ps -l docker commit -m "my nginx" cce145f94a2a showei/my-nginx:v8 利用新创建的镜像开启服务 docker images docker run -d -p 92:80 showei/my-nginx:v8 /usr/local/nginx/sbin/nginx 11、docfile镜像 mkdir /opt/docker-file/nginx -p cd /opt/docker-file/nginx wget http://nginx.org/download/nginx-1.9.3.tar.gz wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz vim Dockerfile # this is first Dockfile # Version 1.0 # Author: shaowei #Base images FROM centos #MAINTAINER MAINTAINER shaowei ADD pcre-8.39.tar.gz /usr/local/src/ ADD nginx-1.9.3.tar.gz /usr/local/src/ #RUN RUN yum install -y wget gcc gcc-c++ make openssl-devel vim RUN useradd -s /sbin/nologin -M www #WORKDIR WORKDIR /usr/local/src/nginx-1.9.3 #RUN RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/ pcre-8.39 && make && make install RUN echo "daemon off;" >> /usr/local/nginx/nginx.conf ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 CMD ["nginx"] docker build -t nginx-file:v1 . docker images 12、创建私有仓库 ##################################### 1、安装 wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo yum -y install docker-io /etc/init.d/docker start docker search centos docker pull centos docker images docker run centos /bin/echo 'Hello World' docker ps -a docker run --name mydocker -it centos /bin/bash docker run -d --name mydocker1 centos 2、后台运行nginx,并运行 docker run -d --name mynginx nginx yum -y install util-linux docker ps -l docker inspect --format "{{.State.Pid}}" mynginx nsenter --target 27879 --mount --uts --ipc --net --pid 3、脚本进入后台运行的docker vim in.sh #!/bin/sh CNAME=$1 CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME) nsenter --target "$CPID" --mount --uts --ipc --net --pid ./in.sh mynginx ip ro li 查看路由表 brctl show 4、随机端口映射启动 docker run -d -P --name mynginx1 nginx docker ps -l http://192.168.8.128:32769/ 浏览器访问 5、指定端口映射 docker run -d -p 91:80 --name mynginx2 nginx http://192.168.8.128:91/ 浏览器访问 6、数据卷 docker run -it --name volume-test1 -h nginx -v /data centos #主机名写错了,随便 docker inspect -f {{.Volumes}} volume-test1 #查看容器的信息 指定目录挂载 docker run -it --name volume-test2 -h nginx -v /opt:/opt centos 7、数据卷容器 docker run -it --name volue-test4 --volumes-from volume-test1 centos 8、手动镜像(安装nginx) docker run --name nginx-man -it centos yum install -y wget gcc gcc-c++ make openssl-devel vim cd /usr/local/src/ wget http://nginx.org/download/nginx-1.9.3.tar.gz wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz useradd -s /sbin/nologin -M www tar zxf pcre-8.39.tar.gz tar zxf nginx-1.9.3.tar.gz cd nginx-1.9.3 && ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/pcre-8.39/ make && make install 设置开机启动 vim /usr/local/nginx/conf/nginx.conf daemon off; 退出做镜像 exit docker ps -l docker commit -m "my nginx" cce145f94a2a showei/my-nginx:v8 利用新创建的镜像开启服务 docker images docker run -d -p 92:80 showei/my-nginx:v8 /usr/local/nginx/sbin/nginx 9、docfile镜像 mkdir /opt/docker-file/nginx -p cd /opt/docker-file/nginx wget http://nginx.org/download/nginx-1.9.3.tar.gz wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.39.tar.gz vim Dockerfile # this is first Dockfile # Version 1.0 # Author: shaowei #Base images FROM centos #MAINTAINER MAINTAINER shaowei ADD pcre-8.39.tar.gz /usr/local/src/ ADD nginx-1.9.3.tar.gz /usr/local/src/ #RUN RUN yum install -y wget gcc gcc-c++ make openssl-devel vim RUN useradd -s /sbin/nologin -M www #WORKDIR WORKDIR /usr/local/src/nginx-1.9.3 #RUN RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-http_stub_status_module --with-pcre=/usr/local/src/ pcre-8.39 && make && make install RUN echo "daemon off;" >> /usr/local/nginx/nginx.conf ENV PATH /usr/local/nginx/sbin:$PATH EXPOSE 80 CMD ["nginx"] docker build -t nginx-file:v1 . docker images 10、压测 安装压力测试stress cd /opt/docker-file/stress wget http://mirrors.aliyun.com/repo/epel-6.repo vim Dockerfile FROM centos ADD epel-6.repo /etc/yum.repos.d/ RUN yum -y install stress && yum clean all ENTRYPOINT ["stress"] docker build -t stress . 查看CPU分配的情况(不要在物理机下执行) docker run -it --rm stress --cpu 1 docker run -it --rm stress -c 512 --cpu 1 查看内存分配的情况(不要在物理机下执行) docker run -it --rm -m 128m stress --vm 1 --vm-bytes 120m --vm-hang 0 11、网络 brctl show #查看网络 12、创建私有仓库 docker pull registry docker run -d -p 5001:5000 registry 把nginx的id加入私有仓库 docker tag e25b44da7031 192.168.8.128:5001/test/es:v1 docker push 192.168.8.128:5001/test/es:v1 docker run -it -d --name shipyard-rethinkdb-data --entrypoint /bin/bash shipyard/rethinkdb -l