美文网首页
Docker入门

Docker入门

作者: 无心Y | 来源:发表于2019-12-10 17:01 被阅读0次

    docker 概念

    • 仓库(Repository): 镜像集合,保存和管理镜像
    • 镜像(Image): 容器的模板,静态概念,包含配置和定义(类似类)
    • 容器(Container): 包含运行时环境、内部代码、组件、依赖包等独立的单位,动态概念,镜像的实例(类似对象)

    docker安装

    # install in centos by yum
    >>>yum install -y docker
    
    # install by scripts
    >>>yum update
    >>>curl -fsSL https://get.docker.com/ | sh
    
    # install in ubuntu
    >>>sudo apt-get remove docker docker-engine docker.io containerd runc #      1. 卸载旧版本
    >>>sudo apt-get update # 2. 更新软件包
    >>>sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent \
        software-properties-common # 3. 安装依赖包
    >>>curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
    # 4. 添加Docker官方GPG密钥
    >>>sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # 5. 添加存储库
    >>>sudo apt-get install docker-ce docker-ce-cli containerd.io # 6. 安装docker
    
    # 配置镜像源
    >>>sudo vim /etc/docker/daemon.json  添加以下内容
    {
        "registry-mirrors": ["https://49lr97vi.mirror.aliyuncs.com"]
    }
    >>>sudo systemctl daemon-reload
    >>>sudo systemctl restart docker
    

    docker服务启停

    • 开启docker服务:sudo service docker start
    • 重启docker服务:sudo service docker restart
    • 关闭docker服务:sudo service docker stop
    • 守护进程重启: sudo systemctl daemon-reload

    docker镜像操作

    • 远程仓库搜索镜像:sudo docker search --limit 30 {keywords}
    • 从远程仓库拉取镜像:sudo docker pull {source}:{tag},未指定tag默认拉取最新的
    • 查询本地已有的镜像:sudo docker images
    • 镜像导出:sudo docker save -o {path} {image}
    • 镜像导入:sudo docker load --input {path}
    • 镜像删除:sudo docker rmi {image}
    • 修改镜像标签:sudo docker tag {org_image}:{org_tag} {image}:{tag}
    • 镜像的修改和发布(example)
      • 登录阿里容器镜像服务,创建私有仓库
      • 设置访问凭证
      • 拉取镜像:sudo docker pull {image}
      • 创建容器并开启虚拟终端:sudo docker run -it {image}
      • 修改容器内容,安装vim:sudo apt-get install vim
      • 提交修改:sudo docker commit -m "install vim" {image_id} {repository_url/path}, 生成本地镜像
      • 上传本地镜像至仓库:sudo docker push {local_image}

    docker容器操作

    • 查看本地已有容器:sudo docker ps -a
    • 基于镜像创建一个容器:sudo docker run {image} {options}
      • 创建容器并在容器中执行指定命令:sudo docker run {image} echo "Hello"
      • 创建容器并开启交互式虚拟终端:sudo docker run -it {image}
      • 退出交互式虚拟终端:ctrl + p + q
      • 创建容器开启终端并在后台执行:sudo docker run -dt {image}
      • 创建容器,实现容器命名、挂载卷、端口映射
    >>>sudo docker run \
                    -d #后台运行
                    -e "k=v" #设置环境变量
                    -v {local_path}:{container_path} #本地文件挂载至容器
                    -p {local_port}:{container_port} #本地端口映射容器端口
                    --name {container_name}          #容器名
                    {image}
    
    • 重命名容器:sudo docker rename {original_container} {container}
    • 容器启停
      • 开启容器:sudo docker start {container_id}
      • 重启容器:sudo docker restart {container_id}
      • 停止容器:sudo docker stop {container_id}
      • 结束容器:sudo docker kill {container_id}
    • 容器删除: docker rm {container_id}
    • 在正在运行的容器中执行命令
      • 通过容器执行:sudo docker exec {container_id} {cmd}
      • 为正在运行的容器开启一个虚拟终端:sudo docker exec -it {container_id} bash
      • 为正在运行的容器设置环境变量:sudo docker exec -e="k=v" {container_id}
    • 本地和运行中的容器互相拷贝数据
      • 本地拷贝到容器:sudo docker cp {local_path} {container_id}:{path}
      • 容器拷贝到本地:sudo docker cp {container_id}:{path} {local_path}
    • 查看容器日志
      • 查看实时日志:sudo docker logs -f -t --tail=100 {container_id} 最后100行
      • 查看某个时间段日志:sudo docker logs --since="start_time" --until="end_time" {container_id}
    • 查看容器内运行的进程:sudo docker top {container_id}

    docker-file生成镜像

    • docker-file基本结构
    # 1. 基础镜像: 表示在 ubuntu 镜像基础上进行扩展
    FROM ubuntu
    
    # 2. 维护者信息: 填写维护者的信息
    MAINTAINER qianyin qianyin95@gmai.com
    
    # 3. 镜像操作指令: 对镜像进行扩展, 安装 vim 工具
    RUN apt-get update && apt-get install -y vim
    
    # 4. 容器启动时执行指令: 指定新建容器在每次运行时需要执行的命令
    CMD bash
    
    # 5. 配置每次容器启动后需要执行的命令
    ENTRYPOINT apt-get update
    
    # 6. 配置容器内环境变量 ENV [键] [值]
    ENV PATH /usr/local/postgres-$PG_MAJOR/bin:$PATH
    
    # 7. 配置容器向外暴露指定端口号
    EXPOSE [1194/udp, 27017, 8080]
    
    # 8. 设置容器允许被挂载的目录或文件
    VOLUME ["/etc/openvpn"]
    
    # 9. 往容器添加文件 ADD [源路径] [目标路径]
    ADD ./bin /usr/local/bin
    
    # 10. 往容器拷贝本地文件 COPY [源路径] [目标路径]
    COPY ./bin /usr/local/bin
    
    # 11. 指定运行容器时的用户
    USER root
    
    # 12. 为容器配置工作目录
    WORKDIR /home
    
    # 13. 设置当所创建的镜像被作为基础镜像时需要执行的命令 ONBUILD [DockerFile 指令]
    ONBUILD ADD . /app/src
    ONBUILD RUN /usr/local/bin/python-build --dir /app/src
    
    • docker build 创建镜像
    # -t 指定构建出镜像的 [名称]:[标签] -f 指定Dockerfile路径
    # 最后的./docker指定当前构建的context所在的位置,依赖的包可置于该路径下
    >>>sudo docker build -t vim-ubuntu:1.0 ./docker
    
    # 构建完运行容器并执行 vim --help 将会显示 vim 的帮助信息
    >>>sudo docker run vim-ubuntu:1.0 vim --help
    

    docker-compose

    应用实例

    通过docker快速搭建nginx服务
    1. 服务nginx相关配置
      • sudo mkdir conf
      • sudo docker cp $(sudo docker run -d --name tmp-nginx nginx):/etc/nginx/nginx.conf ./conf/nginx.conf 拷贝默认配置文件至本地
      • sudo docker rm -rf tmp-nginx 删除临时容器
    2. 运行容器
    >>>sudo docker run \
                    -d
                    -p 8081:80 #本地8081端口映射至容器80端口
                    -v $PWD/html:/usr/share/nginx/html \
                    -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf \
                    -v $PWD/logs:/var/log/nginx #本地文件挂载至容器
                    --name nginx-web \
                    nginx
    >>>sudo chmod -R 777 conf html logs
    

    相关文章

      网友评论

          本文标题:Docker入门

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