首页 > 技术文章 > Docker

golangav 2018-06-17 12:06 原文

 

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
centos环境

 

推荐阅读