Docker笔记

2
回复
2381
查看
[复制链接]
  • TA的每日心情
    开心
    2020-12-4 14:43
  • 签到天数: 1 天

    [LV.1]初来乍到

    1

    主题

    3

    帖子

    13

    积分

    凡人程序员

    Rank: 1

    积分
    13
    发表于 2020-12-4 14:48:05 | 显示全部楼层 |阅读模式

    登录后查看本帖详细内容!

    您需要 登录 才可以下载或查看,没有帐号?立即注册

    x
    # Docker笔记

    ## 安装docker
            1) yum install -y docker-io   或   在清华源下载 docker-ce.repo 安装
                    修改  docker-ce.repo 文件中的源地址 使用 yum -y install docker-ce
                   
            2) 使用阿里云镜像源下载
                    在/etc/yum.repos.d文件夹中下载镜像  wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
                   
                    安装命令
                     yum install -y  docker-ce docker-ce-cli containerd.io
                   
            3) 【**可以不配置**】自定义docker数据存储目录(默认目录在 /var/lib/docker目录下) vim /etc/docker/daemon.json 没有该文件就创建 daemon.json文件       
           
                    文件内容:
           
                    {
                            "graph":"/opt/docker-data" /可以任意指定数据存储目录
                    }

    ### Centos7 启动 、查看状态 、停止  docker

            systemctl enable docker //设置开机启动 docker
            systemctl start docker
            systemctl status docker
            systemctl stop docker

    -----------------------------------------------------------------

    ## 常用命令操作

    ### 搜索镜像
            docker search centos

    ### 拉取镜像或指定版本镜像
            docker pull centos
            docker pull centos:centos7

    ### 运行镜像保持打开进入镜像
            docker run  --name server_01 -it centost /bin/bash

    ### 查看本地镜像
            docker images

    ###运行镜像后台运行指定容器名称
            docker run -d --name nginx_01 nginx

    ### 启动中止的容器
            docker start (容器id)

    ### 查看容器进程
            docker top nginx_server_01

    ### 查看容器 端口占用信息
            docker port nginx_server_01

    ### 停止容器
            docker stop 544200aaef1d(容器id)

    ### 停止所有容器
            docker stop $(docker ps -aq)

    ### 删除容器
            docker rm 544200aaef1d(容器id)

    ###删除所有容器
            docker rm $(docker ps -aq)

    ### 删除运行的容器
            docker stop 544200aaef1d(容器id)
            docker rm 544200aaef1d(容器id)

    ###删除镜像
            docker rmi -f centos

    ### 连接进入容器:
            docker exec -it nginx_01(容器名称) /bin/bash

    ### 容器中安装procps命令
            apt-get update && apt-get install procps

    ### 退出容器
            exit

    ### 查看最后运行的容器信息
            docker ps -l

    ### 查看服务器上所有的容器信息
            docker ps -a

    ### 进入容器脚本:
            #!/bin/bash
            CNAME=$1
            CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
            nsenter --target "$CPID" --mount --uts --ipc --net --pid

    ### 复制宿主机中的文件到容器中的某个文件夹中
            docker cp /etc/hosts nginx_server_01:/tmp

    ### 复制容器中的文件到宿主机中
            docker cp nginx_server_01:/tmp/1.txt ./

    ### 检查容器中的文件是否有改动
            docker diff nginx_server

    ### 导出容器文件系统到本地
            docker export -o test_docker.tar nginx_server_01
           
    ### 镜像重命名
            docker tag nginx_server:nginx zhaoyongshui/nginx_server:nginx

    ### 上传镜像到仓库
            docker push zhaoyongshui/nginx_server:nginx

    ### 从仓库中获取镜像
            docker pull zhaoyongshui/nginx_server:nginx

    ### 将容器变为镜像
            docker commit -a "zhaoyongshui" nginx_server nginx_server:nginx

    ### 构建镜像
            创建 Dockerfile 文件
            文件中写  FROM nginx
            docker build .

    ### 镜像生成文件
            docker save -o nginx_server.tar nginx_server:nginx

    ### 加载镜像
            docker load -i nginx_server.tar

    ### 创建容器
            docker create --name nginx_server_2 nginx
           
    ### 修改容器信息
            docker update --cpu-quota 2 nginx_server_2

    ---------------------------------------------------------------------------

    ## 资源管理

    ### docker引擎(engine)

    ### 检查引擎版本
            docker engine check

    ### 更新docker引擎
            docker engine update --version 18.09.9

    ---------------------------------------------------------------

    ## Docker数据卷据管理

    ### 运行容器设置数据卷(--privileged=true 设置挂载目录有访问权限)
            docker run -it --name centos_test_01 -h centos_test_01 -v /data --privileged=true centos

    ### 运行容器挂载本地服务器目录到指定目录下(--privileged=true 设置挂载目录有访问权限)
            docker run -it --name centos_test_02 -h  centos_test_02 -v /test_01:/data --privileged=true centos

    ### 获取容器信息
            docker inspect centos_test_02

    ### 运行容器共享另外一个容器挂载目录(--privileged=true 设置挂载目录有访问权限)
            docker run -it --name centos7_03 -h centos7_03 --privileged=true --volumes-from centos_test_02 centos:centos7

    ### 创建卷(volume)
            docker volume create --name myvolume

    ### 查看创建数据卷的格式
            docker volume inspect myvolume

    ### 把卷挂载给容器可以读写
            docker run -itd --name server_2 -v myvolume:/data:rw centos

    -----------------------------------------------------------------

    ## Docker 网络

    ### 查看网桥命令
            brctl show

    ### 查看IP安装IP命令: apt update && apt install -y iproute2 )
            ip ad li

    ### 查看路由表
            ip ro li

    ### docker运行时随机映射端口
            docker run -d -P --name nginx_02 nginx

    ### docker 运行时指定映射端口
            docker run -d -p 91:80 --name nginx_03 nginx

    ### docker 运行时IP指定映射和端口指定映射
            docker run -d -p 172.23.7.117:91:80 --name nginx_03 nginx
           
    ### 查看容器中的网络
      docker network ls

    ### 创建网络
            docker network creat mynet
           
    ### 启动容器并指定网络
            docker run  -itd --name server_3  --net mynet centos:7
           
    ### 查看路由  
            route -n
           
    ### 两个容器使用不同网卡时进行互通
            docker network connect mynet server_1
           
    ------------------------------------------------------------
           
    ## Dockerfile(用来构建镜像文件,文件中包含一些指令)
           
    ### Dockerfile文件语法:

    * **Dockerfile文件在当前目录下:**
                    docker build -t name(镜像名称如:image:v.0.1) .(指的是当前目录)

    * **-t 指定镜像名称:**
                    docker build -t nginx_server:v.0.1 .

    * **-f 指定Dockerfile文件目录:**
                    docker build -t nginx_server:v.0.1 -f /opt/file .
                   
    * **--no-cache 不使用缓存**
                    docker build -t nginx-server:v.0.1 --no-cache -f /opt/file .
                   
    ### 编写Dockerfile

    >指令不区分大小写,推荐大写, docker会按照顺序执行每一行指令。

    >一个dockerfile必须以**FROM**(指定基础镜像)开始

    >开头为注释

    >环境变量  用 ENV 声明

    >环境变量Dockerfile用 $variable_name 或表示${variable_name}

    ### Dockerfile指令
    * **ADD(添加文件)**
                    ADD [--chown=<user>:<group>] <src>... <dest>
                    ADD [--chown=<user>:<group>] ["<src>",... "<dest>"]
                   
                    如:
                            ADD test.txt /absoluteDir/
                            ADD hom?.txt /mydir/
                            ADD mydir /tmp/ydir  //添加目录到容器中
                           
                            ADD --chown=55:mygroup files* /somedir/
                            ADD --chown=bin files* /somedir/
                            ADD --chown=1 files* /somedir/
                            ADD --chown=10:11 files* /somedir/

    * **COPY(复制文件)**
                    COPY [--chown=<user>:<group>] <src>...<dest>
                    COPY[--chown=<user>:<group>] ["<src>".."<dest>"]
                   
                    如:
                            COPY my.txt /opt/
                            COPY mydir /opt/mydir
                     

    * **ENV (环境变量 Dockerfile 用 $variable_name 或表示  ${variable_name})**
                     ENV <key> <value>
                     ENV <key>=<value>
                     ENV name zhangsan
                     docker run --env<key>=<value> //运行容器时修复关键变量值

    * **EXPOSE(通知Docker容器在运行时暴露监听指定的网络端口)**
                    EXPOSE 80/udp
                    EXPOSE 80/tcp

    * **FROM(指定基础镜像)**
                    //指定参数
                    ARG CODE_VERSION=7
                    FROM centos{CODE_VERSION}

    * **LABEL(标签 给镜像添加描述信息)**
                    LABEL lang="Java" version="v.0.1" appname="myservice"
                    docker image inspect test:v.0.1 (查看镜像添加描述信息)

    * **STOPSIGNAL**
                    STOPSIGNAL signal

    * **USER (指定容器运行用户名或UID,后续的RUN 也会使用指定用户)**
                    USER <user>[:<group>]
                    RUN useradd -u 1009 testuser
                    USER 1009

    * **VOLUME**
                    VOLUME ["/myvol"]

    * **WORKDIR(指定容器工作目录)**
                    WORKDIR /path/to/workdir          //容器中的目录

    * **ONBUILD (当与以上支持的说明之一结合使用时)**
                    ONBUILD <INSTRUCTION>

    * **RUN (执行命令)**
                    RUN ["/bin/bash","-c","echo hello"]
                    RUN ["/bin/bash -c","echo hello"]
                    RUN ["/bin/bash -c","source $HOME/.bashrc; echo $HOME"]
                   
    * **CMD(容器运行时默认的指令)**
                    CMD ls
                    CMD ["/bin/bash","-c","echo hello"]
                   
    * **ENTRYPOINT**
                    ENTRYPOINT ["executable", "param1", "param2"]  


    ### Dockerfile案列:

    #### 列1:
            FROM centos
            ENV name zhangsan
            USER ${name}
           
    #### 列2:
            ARG CODE_VERSION=7
            FROM centos{CODE_VERSION}
            RUN echo ${CODE_VERSION}
           
    ------------------------------------------------------------------------
    ## 构建Nginx镜像

    >**1.创建 nginx.repo文件**

                    //文件内容
                   
                    [nginx-stable]
                    name=nginx stable repo
                    baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
                    gpgcheck=1
                    enabled=1
                    gpgkey=https://nginx.org/keys/nginx_signing.key
                    module_hotfixes=true

                    [nginx-mainline]
                    name=nginx mainline repo
                    baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
                    gpgcheck=1
                    enabled=0
                    gpgkey=https://nginx.org/keys/nginx_signing.key
                    module_hotfixes=true

                   
    >**2.创建Dockerfile文件**

                    FROM centos:7
                                   
                    USER root
                    LABEL MAINTAINER="NGINX Docker Maintainers zhaoyongshui@qq.com"

                    COPY nginx.repo /etc/yum.repos.d/nginx.repo

                    RUN yum -y install nginx
                   
                    #端口
                    EXPOSE 80
                   
                    #CMD ["/usr/sbin/nginx","-g","daemon off;"]
                    CMD ["nginx","-g","daemon off;"]
                   
    -----------------------------------------------------

    ## Docker仓库


    ### harbor

    * 下载地址:https://github.com/goharbor/harbor/releases
    * wget https://github.com/goharbor/harb ... nstaller-v2.1.1.tgz
    * wget https://github.com/goharbor/harb ... nstaller-v2.1.1.tgz

    >**安装 harbor**

            tar zxf harbor-online-installer-v2.1.1.tgz
           
            1.运行以下命令以下载Docker Compose的当前稳定版本:
                    sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
                    下载地址:https://github.com/docker/compose/releases
           
            2.将可执行权限应用于二进制文件:
                    sudo chmod +x /usr/local/bin/docker-compose
                   
            3.测试安装:
                    docker-compose --version
                   
            4.卸载
                    sudo rm /usr/local/bin/docker-compose
                   
                    如果使用pip以下命令安装,则要卸载Docker Compose
                    pip uninstall docker-compose

    >**http 请求推送镜像到 本地 harbor**

            1.修改 /etc/docker/daemon.json文件 ,如果没有创建 /etc/docker/daemon.json
                   
                    //文件内容
                    {
                    "insecure-registries" : ["172.23.7.117:89",]  //配置成本地 harbor服务地址
                    }
                   
            2. 重启 docker
              systemctl restart docker

            3.harbor  停止命令 (需要在harbor安装目录下执行该命令)
                    docker-compose down -v
           
            4.harbor 重启命令
             docker-compose up -d
             
            5.登录 harbor
                    docker login 172.23.7.117:89
           
            6.本地镜像标记一下
                    docker tag  nginx_server:v1 172.23.7.117:89/web_server/nginx_server:v1

            7.推送镜像到本地harbor仓库中
                    docker push 172.23.7.117:89/web_server/nginx_server:v1

    ------------------------------------------------------------------               
    ### 部署Nginx网站应用
    > **1.使用户宿主机挂载方式部署网站**

                    1.下载 nginx镜像
                            docker pull  nginx       
                           
                    2.默认的nginx 镜像的root(站点)目录为 /usr/share/nginx/html/
                   
                    3.添加 /opt/html目录权限
                            chmod 777 /opt/html
                           
                    4.运行nginx容器
                            docker run -itd -p 10080:80 -v /opt/html:/usr/share/nginx/html --name nginx_server nginx:latest
                           
    >**2.制作Docker镜像**
           
                    1.Dockerfile内容
                   
                            FROM nginx:latest
                           
                            LABEL owner="zhaoyongshui"
                           
                            COPY html/ /user/share/nginx/html/
                           
                    2.构建镜像
                            docker build -t web_server:v1 .
                           
                    3.运行构建的web_server:v1镜像
                            docker run -p 10080:80 --name nginx_server web_server:v1

    >**最佳实战**

                    1.Dockerfile内容
                   
                            FROM nginx:latest
                           
                            LABEL owner="zhaoyongshui"
                           
                            COPY nginx.conf /etc/nginx/nginx.conf
                           
                            COPY html/ /user/share/nginx/html/
                           
                    2.构建镜像
                            docker build -t web_server:v1 .
                           
                    3.运行构建的web_server:v1镜像
                            docker run -p 10080:80 --name nginx_server web_server:v1
           

    ### Docker 部署Jenkins

    >**1.下载镜像**

            docker pull jenkins/jenkins:2.249.3-lts-centos7
           
    >**2.启动容器(创建 opt/jenkins 并且授权  chmod 777 -R /oph/jenkins/)**

            docker  run  -itd --rm --name jenkins -p 8081:8080  -p 50000:50000 -v /opt/jenkins:/var/jenkins_home jenkins/jenkins:2.249.3-lts-centos7

        查看 jenkins运行日志
            docker logs -f jenkins
           
            通过日志可以查看到密码存放位置: /var/jenkins_home/secrets/initialAdminPassword
           
        查看容器中jenkins密码
             docker exec jenkins cat /var/jenkins_home/secrets/initialAdminPassword
             64a7c66378334c278ca14590ebdabe70
                           
           

    〖下载地址失效反馈〗:

    下载地址如果失效,请反馈。反馈地址: https://www.fstcode.com/thread-5527-1-1.html

    〖赞助VIP免灵石下载全站资源〗:

    全站资源高清无密,每天更新,VIP特权: https://www.fstcode.com/plugin.php?id=threed_vip

    〖客服24小时咨询〗:

    有任何问题,请点击右侧客服QQ咨询。

    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-7-19 14:54
  • 签到天数: 7 天

    [LV.3]偶尔看看II

    0

    主题

    10

    帖子

    60

    积分

    练气程序员

    Rank: 2

    积分
    60
    发表于 2021-1-13 13:38:19 | 显示全部楼层
    厉害,感谢厉害,感谢厉害,感谢厉害,感谢厉害,感谢厉害,感谢厉害,感谢
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2019-10-18 11:11
  • 签到天数: 1 天

    [LV.1]初来乍到

    0

    主题

    90

    帖子

    276

    积分

    终身VIP

    Rank: 12Rank: 12Rank: 12

    积分
    276
    发表于 2023-3-26 03:51:44 | 显示全部楼层
    我擦!我要沙发!
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

     
    在线客服
    点击这里给我发消息 点击这里给我发消息
    用心服务所有程序员,做最好的编程视频网站
    QQ:354410543
    周一至周日 00:00-24:00
    联系站长:admin@fstcode.com

    QQ群(仅限付费用户)

    Powered by "真全栈程序员" © 2010-2023 "真全栈程序员" 本站资源全部来自互联网及网友分享-如有侵权请发邮件到站长邮箱联系删除!