官方文档:https://docs.docker.com/engine/reference/run/
#查看当前docker版本
sudo docker --version
#我安装的为 Docker version 18.09.0, build 4d60db4
#查找ubuntu镜像
sudo docker search ubuntu
#拉取ubuntu镜像,2019-01-23拉去到的镜像版本为18.04LTS
sudo docker pull ubuntu
#查看当前安装的镜像
sudo docker images
创建docker容器
创建一个容器,并取名为my-docker,
-i是为了让容器能接受用户的输入,-t是指定docker为容器创建一个tty,
因为ubuntu这个镜像默认启动的进程是bash,而bash需要tty,否则会异常退出
sudo docker create -it --name my-docker ubuntu
启动容器
sudo docker start my-docker
在容器
my-docker
上执行交互式shell
sudo docker exec -it my-docker bash
替换apt源为阿里源
先执行上面的命令进入容器的命令行,然后执行以下命令替换源为阿里源
cp /etc/apt/sources.list /etc/apt/sources.list.bak
echo -e "deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\ndeb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse" > /etc/apt/sources.list
apt update
重命名容器
sudo docker rename old_name new_name
列出端口映射或容器的特定映射
sudo docker port my-docker
将容器的文件系统导出为tar存档
--output , -o
写入文件,而不是STDOUT
docker export red_panda > latest.tar
docker export --output="latest.tar" red_panda
创建一个可以随后使用的容器备份
--output , -o
写入文件,而不是STDOUT
docker save busybox > busybox.tar
docker save --output busybox.tar busybox
读取一个容器备份
--input , -i
从tar归档文件中读取,而不是STDIN
docker load < busybox.tar.gz
docker load --input fedora.tar
以上Create以及Start命令可用run简化
sudo docker run -itd --name my-docker ubuntu
查看当前所有容器
sudo docker ps -a
停止以及删除所有容器
sudo docker stop $(sudo docker ps -a -q)
sudo docker rm $(sudo docker ps -a -q)
run命令常用选项说明
更多内容见:https://docs.docker.com/engine/reference/commandline/create/
-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=[]
, 指定容器暴露的端口,例如-p 80:8080
,绑定主机的80端口和容器的8080端口-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不能被代理--privileged
为容器提供了所有功能,它还device解除了cgroup控制器强制执行的所有限制。换句话说,容器几乎可以完成主机可以执行的所有操作。此标志存在以允许特殊用例,例如在Docker中运行Docker。