Docker

作者: 三点四行间 | 来源:发表于2018-12-01 01:20 被阅读0次

    什么是Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

    和虚拟机的区别

    组成

    Docker是一个C/S结构,由镜像,容器和仓库组成
    容器是由镜像实例化而来,这和我们学习的面向对象的概念十分相似,我们可以把镜像看作类,把容器看作类实例化后的对象。

    应用场景

    • 简化配置
    • 提高开发效率,不用部署环境
    • 快速部署
    • 代码流水线
    • 开发调试
    • 产品发布模式
    • 分布式集群
    • 存储过程储备数据

    docker安装使用

    使用docker前先sudo su 进入root超级用户
    ubuntu安装docker

    $ apt install -y docker.io
    

    docker帮助文档

    $ docker [options] --help
    

    查看版本

    $ docker -v
    

    查看docker属性

    $ docker info
    

    docker启动

    $ /etc/init.d/docker start
    

    搜索centos镜像,第一个是官方镜像

    $ docker search centos
    

    拉取centos镜像

    $ docker pull centos
    

    如果拉取镜像出现TLS handshake timeout的报错,需要更换为国内镜像

    https://blog.csdn.net/hhyihquk1/article/details/84099336
    

    查询本地已存在的镜像

    $ docker images
    

    删除镜像

    $ docker rmi [IMAGE ID]
    

    运行centos容器echo命令

    $ docker run centos /bin/echo "Hello World"
    

    查看docker最新的容器

    $ docker ps -l
    

    运行并进入docker容器

    $ docker run -it --name mydocker centos /bin/bash
    

    在后台运行docker容器,如果没有该镜像会先下载

    $ docker run -d --name myngixn nginx
    

    启动/停止/删除容器进程

    $ docker start 48bc8ba89baf
    $ docker stop 48bc8ba89baf
    $ docker rm 48bc8ba89baf  # 删除前需要先停止容器进程
    

    批量停止/删除容器

    $ docker stop $(docker ps -a -q)
    $ docker rm $(docker ps -a -q)
    $ sudo docker rm `docker ps -a|grep Exited|awk '{print $1}'` 
    

    进入docker容器

    $ docker attach 5e9a3378955e  # 这种方式往往会失败,查看docker
    $ docker inspect --format "{{.State.Pid}}" mynginx   # 先获取pid
    $ nsenter --target 4281 --mount --uts --ipc --net --pid  # 再挂载进入
    

    将进入docker容器做成脚本

    #!/bin/bash
    CNAME=$1
    CPID=$(docker inspect --format "{{.State.Pid}}" $CNAME)
    nsenter --target "$CPID" --mount --uts --ipc --net --pid
    
    ./in.sh mynginx
    

    返回docker对象信息

    docker inspect volume-test1
    

    格式化输出docker对象信息

    docker inspect -f {{.Config.Volumes}} volume-test1
    docker inspect volume-test1 | grep Mounts -A 10
    

    docker网络访问

    端口映射
    随机映射

    docker run -d -P --name mynginx nginx
    

    指定映射

    docker -d -p 91:80 --name mynginx1 nginx
    

    docker数据管理

    数据卷

    -v /data
    -v src:dst
    

    数据卷示例

    docker run -it --name volume-test1 -h centos -v /data centos  # 随机映射
    docker run -it --name volume-test2 -h centos -v /opt:/opt centos  # 指定映射
    docker run -it --name volume-test3 -h centos -v /opt:/opt:ro centos  # /opt:/opt:ro是只读,针对docker容器的只读,不影响物理主机
    

    https://blog.csdn.net/qq_34173549/article/details/80400454 数据映射翻车记录
    数据卷容器

    --volumes-from 
    

    数据卷容器示例

    docker run -it --name volume-test5 --volumes-from volume-test4 -h centos centos
    

    docker镜像构建

    镜像构建实战(构建nginx镜像):

    yum install -y wget gcc gcc-c++ make openssl-devel
    wget http://nginx.org/download/nginx-1.17.5.tar.gz
    wget ftp://ftp.pcre.org/pub/pcre/pcre-8.43.tar.gz
    mv *.gz /usr/local/src
    cd /usr/local/src/
    tar zxvf nginx-1.17.5.tar.gz
    tar zxvf pcre-8.43.tar.gz
    cd nginx-1.17.5
    ./configure --prefix=/usr/local/nginx --with-pcre=/usr/local/src/pcre-8.43
    make
    make install
    vi /usr/local/nginx/conf/nginx.conf
    # daemon off;
    # 退出镜像
    docker commit -m "my nginx" 02b39f5b9e8c chenzejian/nginx:v1
    docker images
    docker run -d -p 99:80 chenzejian/nginx:v1
    

    浏览器运行 http://192.168.1.126:99/

    相关文章

      网友评论

          本文标题:Docker

          本文链接:https://www.haomeiwen.com/subject/odflcqtx.html