美文网首页
Docker学习笔记

Docker学习笔记

作者: LzSkyline | 来源:发表于2020-02-26 20:21 被阅读0次

    前言

    作为一个苦逼Windows用户, Docker和Virtualbox只能二选一. 所以之前就一直没怎么用过Docker. 但最近因工作需要不得不用docker, 只好恶补一下, 顺便做个笔记, 把自己学习过程中的一些理解记录下来

    常用命令

    下载镜像

    docker pull <image_name>
    

    列出镜像

    docker images
    docker image ls
    

    删除镜像

    docker rmi <image_name/image_id>
    

    运行容器

    docker run -it <image_name/image_id> <params>
    

    -i ,interactive, 交互式操作

    -t ,terminal 创建一个伪终端

    -i 和 -t一般连用, 不用-i的话不能进行交互(比如用不了vi这些交互式命令)

    -d ,daemon 后台运行

    --rm, 停止后自动删除容器, 不需要再去docker ps -a&&docker rm了

    -v <path>:<path>, volume 共享文件夹

    -p <host_port>:<container_port>, port 映射端口

    -P, Ports 映射全部端口

    --privileged, 用特权方式运行容器. 可以简单理解为Windows下的以管理员权限运行, linux下的sudo, 一般涉及到宿主机硬件或者系统文件的时候才需要用到

    --net "bridge", 指定容器的网络连接类型

    bridge, 创建独立的网络栈,保证容器内的进程组使用独立的网络环境,实现容器间、容器与宿主机之间的网络栈隔离。另外,Docker通过宿主机上的网桥(docker0)来连通容器内部的网络栈与宿主机的网络栈,实现容器与宿主机乃至外界的网络通信

    host, 容器将不会虚拟出自己的网卡,配置自己的IP等,而是使用宿主机的IP和端口

    none, 容器创建后没有网卡、IP、路由等信息。需要手动添加网卡、配置IP

    container, 指定新创建的容器和已经存在的一个容器共享一个Network Namespace,而不是和宿主机共享

    --name "container_name", 自定义一个容器名称, 方便后面使用

    -h "<hostname>", host 指定容器的hostname

    --dns <dns_server>, 指定容器的dns服务器

    列出容器

    列出当前运行的容器

    docker ps
    

    列出所有创建的容器(包含已关闭但未删除的容器)

    docker ps -a
    

    关闭容器

    docker stop <container_id/container_name>
    

    删除容器

    docker rm <container_id/container_name>
    

    重启容器

    docker restart <container_id/container_name>
    

    进入后台容器

    docker attach <container_id/container_name>
    

    在容器内执行

    docker exec --it <container_id/container_name> <command>
    

    如要在名称为lzskyline的容器中开启一个bash, 可使用:

    docker exec --it lzskyline bash

    退出exec启动的程序不会影响容器的停止

    构建镜像

    根据dockerfile创建镜像文件

    docker build -t <image_name> <image_path>
    

    常用快捷键

    容器内关闭退出: Ctrl + D

    容器内关闭不退出: Ctrl+P+Q

    dockerfile部分

    1. 如果别人的镜像用的不爽但是又没有对方的dockerfile文件时可以用FROM的方式继承镜像内容, 再使用RUN执行命令二次修改

    常见问题

    1. docker容器运行后自动退出, 加了-itd不起作用

      原因:

      image的ENTRYPOINT可能设置为了一个非挂起的程序, 比如在dockerfile里面指定了ENTRYPOINT ["ls"]. 这样就是会自动退出的

      解决方案:

      有dockerfile的话就修改一下, 改为ENTRYPOINT ["bash"]之类的即可.

      没有dockerfile的话可以用FROM的方式继承源镜像, 再在下面加上ENTRYPOINT ["bash"], 可以覆盖掉原来的ENTRYPOINT.

      dockerfile改好之后

    PS

    现在还有很多docker的功能没有使用到, 后续摸索完之后会继续补充, 目前计划的有

    • dockerfile的相关语法
    • 更新镜像(类似保存快照)

    内容若有错误之处还请留言斧正 _


    博客文章迁移: 2019-11-22 16:21

    相关文章

      网友评论

          本文标题:Docker学习笔记

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