Docker学习笔记

前言

作为一个苦逼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的相关语法
  • 更新镜像(类似保存快照)

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

本文链接:

https://www.lzskyline.com/archives/81/
1 + 5 =
快来做第一个评论的人吧~