镜像images
- 获取镜像
dock pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
- 运行
$ docker run -it --rm ubuntu:18.04 bash
root@e7009c6ce357:/# cat /etc/os-release
NAME="Ubuntu"
VERSION="18.04.1 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.1 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic
docker run 就是运行容器的命令
-
-it
:这是两个参数, 一个是-i
交互式操作,一个是’-t’ 终端,我们这里打算 进入bash
执行一些命令并 -
–rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免浪费空间
-
ubuntu:18.04:这是指用 ubuntu:18.04 镜像为基础来启动容器。
-
bash:放在镜像名后的是 命令,这里我们希望有个交互式 Shell,因此用的是 bash
-
exit 退出了这个容器
-
常用选项说明
-d, –detach=false, 指定容器运行于前台还是后台,默认为false
-i, –interactive=false, 打开STDIN,用于控制台交互
-t, –tty=false, 分配tty设备,该可以支持终端登录,默认为false
-u, –user=””, 指定容器的用户
-a, –attach=[], 登录容器(必须是以docker run -d启动的容器)
-w, –workdir=””, 指定容器的工作目录
-c, –cpu-shares=0, 设置容器CPU权重,在CPU共享场景使用
-e, –env=[], 指定环境变量,容器中可以使用该环境变量
-m, –memory=””, 指定容器的内存上限
-P, –publish-all=false, 指定容器暴露的端口
-p, –publish=[], 指定容器暴露的端口
-h, –hostname=””, 指定容器的主机名
-v, –volume=[], 给容器挂载存储卷,挂载到容器的某个目录
–volumes-from=[], 给容器挂载其他容器上的卷,挂载到容器的某个目录
–cap-add=[], 添加权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cap-drop=[], 删除权限,权限清单详见:http://linux.die.net/man/7/capabilities
–cidfile=””, 运行容器后,在指定文件中写入容器PID值,一种典型的监控系统用法
–cpuset=””, 设置容器可以使用哪些CPU,此参数可以用来容器独占CPU
–device=[], 添加主机设备给容器,相当于设备直通
–dns=[], 指定容器的dns服务器
–dns-search=[], 指定容器的dns搜索域名,写入到容器的/etc/resolv.conf文件
–entrypoint=””, 覆盖image的入口点
–env-file=[], 指定环境变量文件,文件格式为每行一个环境变量
–expose=[], 指定容器暴露的端口,即修改镜像的暴露端口
–link=[], 指定容器间的关联,使用其他容器的IP、env等信息
–lxc-conf=[], 指定容器的配置文件,只有在指定–exec-driver=lxc时使用
–name=””, 指定容器名字,后续可以通过名字进行容器管理,links特性需要使用名字
–net=“bridge”, 容器网络设置:- bridge 使用docker daemon指定的网桥
- host //容器使用主机的网络
- container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
- none 容器使用自己的网络(类似–net=bridge),但是不进行配置
- privileged=false, 指定容器是否为特权容器,特权容器拥有所有的capabilities
- restart=“no”, 指定容器停止后的重启策略:
- no:容器退出时不重启
- on-failure:容器故障退出(返回值非零)时重启
- always:容器退出时总是重启
–rm=false, 指定容器停止后自动删除容器(不支持以docker run -d启动的容器)
–sig-proxy=true, 设置由代理接受并处理信号,但是SIGCHLD、SIGSTOP和SIGKILL不能被代理
列出镜像
docker images
挂载硬盘
docker run ... -v 主机目录:容器中的目录 ...
复制文件
docker cp 源目录 目标目录
常用命令
docker images -----> 查看已下载的镜像
docker rmi 镜像名称:标签名 -----> 删除已下载镜像
docker search 镜像 -----> 从官方仓库(hub.docker.com)查找镜像
docker pull 镜像名称:标签名 -----> 标签名默认是 latest,代表最新版本。
docker pull 镜像名 ------>下载最新版
docker ps -----> 列出运行中的容器(运行中)
docker ps -a ------> 列出所有的容器(运行、未运行)
docker ps -a 查看所有的容器
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c291fb47b70 python:3.9 "python3" 4 minutes ago Up 4 minutes priceless_almeida
docker stop 容器名称id -----> 停止容器
docker start 容器名称id -----> 启动容器
docker start -i 容器的id --->在将一个停止的容器运行起来的同时,指定交互模式
docker restart 容器名称id -----> 重启容器
docker rm 容器id -----> 删除 已经停止运行的容器
docker rm $(docker ps -a -q) -----> 删除所有停止运行的容器 (慎用)
docker rm -f 容器的id -----> 强制删除容器 (无论是否停止运行)
docker rmi 镜像的id
docker run 镜像名字:版本 ----->创建一个容器且运行
-it --->交互模式
docker exec 执行容器中的指令
Dockerfile 参数
FROM:指定基础镜像,必须为第一个命令
MAINTAINER: 维护者信息
ENV:设置环境变量
RUN:构建镜像时执行的命令
ADD:将本地文件添加到容器中,tar类型文件会自动解压(网络压缩资源不会被解压),可以访问网络资源,类似wget
EXPOSE:指定于外界交互的端口
VOLUME:用于指定持久化目录
WORKDIR:工作目录,类似于cd命令
案例
使用MySQL镜像
docker run -d --name=mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.5
命令说明:
- –name=mysql:为容器指定一个名称为mysql
- -p 3306:3306:将容器的(后面的3306) 3306 端口映射到主机的(前面的3306) 3306端口。
- -d:后台运行容器,并返回容器ID。
- -e MYSQL_ROOT_PASSWORD=123456:初始化 root 用户的密码为123456。
- mysql:5.5 要使用的镜像的名称
网络 指令
查看 网络列表
docker network ls
当我们在使用docker-compose构建服务时,会自动创建一个新的网络如下
查看这个网络中所有的容器ip以及其他信息
docker network inspect 网络id
新建一个网络
$ docker network create -d bridge my-net
运行容器连接到my-net 网络
docker run --rm -it --network my-net my_flask:1.0 bash