zoukankan      html  css  js  c++  java
  • 技能篇:docker的简易教程

    虚拟机技术每家公司发展到一定规模都必须考虑的,更好的环境隔离,更好的事故排查,更好的服务部署

    • docker的原理
    • docker更换阿里源
    • docker容器的相关命令
    • Dockerfile文件编写
    • docker镜像的相关命令

    关注公众号,一起交流,微信搜一搜: 潜行前行

    1 docker的原理

    • Docker 利用Linux 中的核心分离机制,例如Cgroups,以及Linux的核心Namespace(名字空间)来创建独立的容器。一句话概括起来Docker就是利用Namespace做资源隔离,用Cgroup做资源限制,利用Union FS做容器文件系统的轻量级虚拟化技术。Docker容器的本质还是一个直接运行在宿主机上面的特殊进程,看到的文件系统是隔离后的,但是操作系统内核是共享宿主机OS,所以说Docker是轻量级的虚拟化技术

    docker 镜像分层

    • docker 容器,理解为一个或多个运行进程,而这些运行进程将占有相应的内存,相应的CPU计算资源,相应的虚拟网络设备以及相应的文件系统资源。而 docker 镜像,则像一个未运行的软件包,为 docker 容器的运行提供文件资源。
    • docker 镜像是分层的。启动镜像时,一个新的可写层会加载到镜像的顶层。这一层通常称为"容器层",之下是"镜像层",可能存在多个层。容器层可以读写,容器所有发生文件变更写都发生在这一层。镜像层只允许读取,read-only
    • 在容器层的文件增删操作,命令安装,都会被记录下来。我们可以通过 commit 命令来创建一个新的镜像
      201912892111906.jpg

    2 docker 更换阿里源

    # vi /etc/apt/sources.list
    ~~更新源
    # sudo apt-get clean
    # sudo apt-get update
    ~~ 安装vim
    # apt-get install vim
    
    • ubuntu 18 的阿里镜像文件。使用下面的数据替换原 sources.list 里的数据
    deb http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
    deb http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-backports main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-proposed main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-security main multiverse restricted universe
    deb-src http://mirrors.aliyun.com/ubuntu/ trusty-updates main multiverse restricted universe
    

    3 docker容器的相关命令

    run 实例化容器

    • 创建一个新的容器并运行:docker run [options] image [command]。image 可以是镜像ID 也可以是仓库名+Tag名:repository[:tag]
    options 常用参数
    -i              以交互模式运行容器,通常与 -t 同时使用
    -t              为容器重新分配一个伪输入终端,通常与 -i 同时使用
    -d              后台运行容器,并返回容器ID
    --name=<name>   为容器指定一个名称
    -p              指定端口映射,格式为:主机(宿主)端口:容器端口
    --net="bridge"  指定容器的网络连接类型,支持bridge/host/none/container: 四种类型
    -e ="v"         设置环境变量
    
    • 示例
    [root@lwl]# docker run -it -p 80:80 --name mynginx nginx:latest /bin/bash
    root@b8573233d675:/# 
    
    ~~ 如果容器的启动命令是依赖伪终端执行,则需要 -it,如 ubuntu:14.04 镜像 
    ~~ 没有依赖伪终端执行的启动命令,可去掉-it,因为-d 参数会直接返回容器ID
    [root@lwl]# docker run -it -d -p 80:80 --name mynginx nginx:latest 
    315cc38afc2f06abb5a2fbb075ebca16455367b2de685cf0c5ba828ab62dd5a1
    [root@lwl]#
    

    start、stop、restart 启动与停止

    ~~ 启动已被停止的容器 。 container 可以是容器名 也可以是容器ID
    # docker start container
    ~~ 停止运行中的容器
    # docker stop container
    ~~ 重启容器
    # docker restart container
    

    ps 容器查询

    // 列出容器
    # docker ps [-options]
    
    -a :显示所有的容器,包括未运行的。
    -f :根据条件过滤显示的内容。
    --format :指定返回值的模板文件。
    -l :显示最近创建的容器。
    -n :列出最近创建的n个容器。
    --no-trunc :不截断输出。
    -q :静默模式,只显示容器编号。
    -s :显示总的文件大小
    
    // 相当于在 container 容器里使用 top命令
    # docker top container
    

    rm 删除容器

    # docker rm container 
    

    cp 文件传输

    • 本机和 docker 容器之前的文件传输
    ~~ 复制本地目录 srcPath 到 容器 container 的目录 destPath
    # docker cp srcPath container:destPath
    ~~ 复制容器 container 的目录 srcPath 到本地目录 destPath
    # docker cp container:destPath srcPath
    

    exec 在运行的容器中执行命令

    docker exec [options] container command 
    
    -d :分离模式: 在后台运行
    -i :即使没有附加也保持STDIN 打开
    -t :分配一个伪终端
    
    ~~ 在容器 mynginx 中以交互模式执行容器内 /root/run.sh 脚本
    # docker exec -it mynginx /bin/sh /root/run.sh
    ~~ 在容器 mynginx 中开启一个交互模式的终端
    # docker exec -it mynginx /bin/bash
    

    logs 获取容器的日志

    docker logs [options] container
    
    -f      跟踪日志输出
    --since 显示某个开始时间的所有日志
    -t      显示时间戳
    --tail  仅列出最新N条容器日志
    
    [root@lwl]# docker logs -f mynginx
    192.168.239.1 - - [10/Jul/2021:16:53:33 +0000] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.93 Safari/537.36" "-"
    2021/07/10 16:53:33 [error] 5#5: *1 open() "/usr/share/nginx/html/favicon.ico" failed (2: No such file or directory), client: 192.168.239.1, server: localhost, request: "GET /favicon.ico HTT
    ....
    

    4 Dockerfile文件编写

    # docker build -f /path/to/a/Dockerfile
    
    // 1 FROM:指定基础镜像,必须为第一个命令,格式:
    FROM <image>
    FROM <image>:<tag>
    // 2 MAINTAINER: 维护者信息 格式:
    MAINTAINER <name>
    // 3 ENV:设置环境变量 格式
    // 4 ARG:用于指定传递给构建运行时的变量 格式:
    ARG <name>[=<default value>]
    // 5 WORKDIR:工作目录,类似于cd命令 格式:
    WORKDIR /path/to/workdir
    ENV <key>=<value
    // 6 ADD:将本地文件添加到容器中,可以访问网络资源,类似wget
    ADD <src>... <dest>
    // 7 COPY:功能类似ADD,但是是不会自动解压文件
    // 8 RUN:构建镜像时执行的命令 格式
    RUN <command>
    // 9 CMD:构建容器后调用,也就是在容器启动时才进行调用
    CMD command param1 param2 (执行shell内部命令)
    // 10 ENTRYPOINT:配置容器,使其可执行化
    ENTRYPOINT command param1 param2 (shell内部命令)
    
    • Dockerfile 示例
    # 基础镜像
    FROM centos
    # 维护者信息
    MAINTAINER tianfeiyu 
    #ENV 设置环境变量
    ENV PATH /usr/local/nginx/sbin:$PATH
    #ADD  文件放在当前目录下,拷过去会自动解压
    ADD nginx-1.8.0.tar.gz /usr/local/  
    ADD epel-release-latest-7.noarch.rpm /usr/local/  
    
    # RUN 执行以下命令 
    RUN rpm -ivh /usr/local/epel-release-latest-7.noarch.rpm
    RUN yum install -y wget lftp gcc gcc-c++ make openssl-devel pcre-devel pcre && yum clean all
    RUN useradd -s /sbin/nologin -M www
    
    # WORKDIR 相当于cd
    WORKDIR /usr/local/nginx-1.8.0 
    
    RUN ./configure --prefix=/usr/local/nginx --user=www --group=www --with-http_ssl_module --with-pcre && make && make install
    RUN echo "daemon off;" >> /etc/nginx.conf
    
    # CMD 运行以下命令
    CMD ["nginx"]
    

    5 docker 镜像的相关命令

    • 镜像查看列举:docker images
    • 镜像搜索:docker search <imageName>;imageName 是 repository[:tag] 的模糊词
    • 拉取:docker pull repository[:tag]
    • 删除单个镜像:docker rmi 镜像ID 或者docker rmi repository[:tag]
    • 给镜像打别名(标签):docker tag oldRepository[/:oleTag] newRepository][/:newTag]
    # docker tag ubuntu:15.10 lwl/ubuntu:v3
    
    • 构建镜像
    ~~ 根据 Dockerfile 构建镜像
    # docker build -t repository[:tag] dir
    # docker build -t lwl/ubuntu:v1 . 
    
    options 参数
    --build-arg=[]   设置镜像创建时的变量
    -t               镜像的名字及标签,通常 name:tag 或者 name 格式
    -f               指定要使用的Dockerfile路径
    
    ~~ 根据正在运行的 container 容器 构建镜像
    # docker commit [options] container repository[:tag]
    
    options 参数
    -a :提交的镜像作者;
    -c :使用Dockerfile指令来创建镜像;
    -m :提交时的说明文字;
    -p :在commit时,将容器暂停
    
    • 推送:docker push repository[:tag]

    欢迎指正文中错误

    参考文章

  • 相关阅读:
    页面上一些小icon的制作方法及技术选择
    移动端h5页面touch事件与点击穿透问题
    浅析 jquerydom操作方法--remove(),detach(),empty()
    jquery中attr和prop的区别
    正则表达式的基本入门
    浏览器对中文标点符号折行的处理差异
    关于阴影:box-shadow
    ubuntu nginx ftp 配置图片服务器
    ubuntu 18 安装ftp 并远程配置访问用户
    WIn10系统软件默认安装c盘后消失看不见问题
  • 原文地址:https://www.cnblogs.com/cscw/p/15029679.html
Copyright © 2011-2022 走看看