[ TOP ]
官网
https://www.docker.com
https://hub.docker.com/
常用命令
- 帮助命令
# 查看run 命令的帮助信息
docker run --help
- 显示 Docker 版本信息。
docker version
- 显示 Docker 系统信息,包括镜像和容器数。
docker info
镜像相关
- 查看镜像
docker images
- 查看镜像详细信息
docker inspect <IMAGE ID>
- 搜索镜像
可以到docker hub 或者命令行搜索
https://hub.docker.com/
alex@Alex ~ docker search ubuntu
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
ubuntu Ubuntu is a Debian-based Linux operating s... 6645 [OK]
dorowu/ubuntu-desktop-lxde-vnc Ubuntu with openssh-server and NoVNC 131 [OK]
rastasheep/ubuntu-sshd Dockerized SSH service, built on top of of... 105 [OK]
ansible/ubuntu14.04-ansible Ubuntu 14.04 LTS with ansible 87 [OK]
- 下载镜像
docker pull ubuntu
- 删除镜像
docker rmi <IMAGE_ID>
- 容器导出(保存当前的容器为一个镜像)
语法:
docker save [OPTIONS] IMAGE [IMAGE...]
容器相关
- docker和宿主机之间复制文件
# 从主机复制到容器
sudo docker cp host_path containerID:container_path
# 从容器复制到主机
sudo docker cp containerID:container_path host_path
# 容器ID的查询方法想必大家都清楚:docker ps -a
- 列出容器
docker ps - Lists containers.
-l:显示最后启动的容器
-a:同时显示停止的容器,默认只显示启动状态
- 停止、启动、杀死一个容器
$docker stop Name/CONTAINER_ID
$docker start Name/CONTAINER_ID
$docker kill Name/CONTAINER_ID
- 删除所有容器
$docker rm `docker ps -a -q`
- 删除指定容器
$docker rm Name/CONTAINER_ID
- 创建一个新的容器并运行一个命令
docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:
- -a stdin : 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
- -d : 后台运行容器,并返回容器ID;
- -i : 以交互模式运行容器,通常与 -t 同时使用;
- -t : 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- --name=”nginx-lb” : 为容器指定一个名称;
- --dns 8.8.8.8 : 指定容器使用的DNS服务器,默认和宿主一致;
- --dns-search example.com : 指定容器DNS搜索域名,默认和宿主一致;
- -h “mars” : 指定容器的hostname;
- -e username=”ritchie” : 设置环境变量;
- --env-file=[] : 从指定文件读入环境变量;
- --cpuset=”0-2” or –cpuset=”0,1,2” : 绑定容器到指定CPU运行;
- -m : 设置容器使用内存最大值;
- --net=”bridge” : 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
- --link=[] : 添加链接到另一个容器;
- --expose=[] : 开放一个端口或一组端口;
- --rm : 退出时删除容器
- -v : 挂载目录,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
- --device /dev/ttyUSB0:/dev/ttyUSB0 : 指定了宿主机的串口设备以及容器的映射串口设备
- --privileged : Docker将拥有访问主机所有设备的权限
例子
- 1.使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
- 2.使用镜像nginx:latest以后台模式启动一个容器,并将容器的80端口映射到主机随机端口。
docker run -P -d nginx:latest
- 3.使用镜像nginx:latest以后台模式启动一个容器,将容器的80端口映射到主机的80端口,主机的目录/data映射到容器的/data。
docker run -p 80:80 -v /data:/data -d nginx:latest
- 4.使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令。
runoob@runoob:~$ docker run -it nginx:latest /bin/bash
root@b8573233d675:/#
进入一个开启的容器
- 方法一:
使用该命令有一个问题。当多个窗口同时使用该命令进入该容器时,所有的窗口都会同步显示。如果有一个窗口阻塞了,那么其他窗口也无法再进行操作。 (适合个人开发)
- 方法一:
docker attach <CONTAINER_ID>
- 方法二:
使用docker exec进入Docker容器
- 方法二:
$ sudo docker ps
$ sudo docker exec -it <CONTAINER_ID> /bin/bash
网络管理
新的linux 没有带 ifconfig 命令,而是用ip 命令代替
如果想使员工__ifconfig___ 就要安装
apt-get install net-tools
网络命令介绍
- iptables
# 进行安装
apt-get install iptables
新镜像创建
基于某个镜像运行起来之后,创建一个新的镜像
- 运行某个镜像(ubuntu:v1)
docker run -it ubuntu:v1 /bin/bash-
- 对镜像进行修改(安装ping 命令)
apt-get install inetutils-ping
- 退出容器,查看容器ID
docker ps -a
- commit docker 容器的修改(alexubuntu: 为修改后新的镜像名称)
docker commit -m "add hello.c" -a "AlexLin" 04727fbe69a3 alexubuntu
- 查看新镜像信息
✘ alex@Alex ~ docker images alexubuntu
REPOSITORY TAG IMAGE ID CREATED SIZE
alexubuntu latest 780ea1933dc9 About a minute ago 163.5 MB
- 导出最新的镜像(save 方式)
docker save -o alexubuntu.tar alexubuntu
- 导入镜像(load 方式)
docker load<alexubuntu.tar
- 查看
alex@Alex ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
alexubuntu latest 780ea1933dc9 3 minutes ago 163.5 MB
ubuntu v1 41269ec1cc87 23 minutes ago 163.5 MB
- 使用 export 和 import 命令
- 选择要导出的镜像 CONTAINER ID
alex@Alex ~ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
65cd9e63d321 ubuntu:v1 "/bin/bash" 11 minutes ago Exited (0) 11 minutes ago grave_panini
04727fbe69a3 ubuntu:v1 "/bin/bash" About an hour ago Up About an hour elated_poincare
591034c72b82 ubuntu "/bin/bash" 3 hours ago Exited (0) About an hour ago nauseous_tesla
- 导出镜像
alex@Alex ~ docker export 65cd9e63d321>newubuntu.tar
alex@Alex ~ ll newubuntu.tar
-rw-r--r-- 1 alex staff 128M 10 7 22:09 newubuntu.tar
- 导入镜像(newubuntu:为镜像名称)
✘ alex@Alex ~ cat newubuntu.tar | docker import - newubuntu
sha256:ecc200f7c4c3a6b1249708c46a627e54dc81ad5e3370ce9d57ad3b413e73e6c0
- 查看
✘ alex@Alex ~ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
newubuntu latest ecc200f7c4c3 20 seconds ago 129.9 MB
Docker中export save 的区别
export : 是基于当前容器的最新状态,导出来的一个镜像,不会保留历史版本信息,所以体积会比较轻;
save : 是针对镜像images,导出来的,会把镜像的历史也一致导入到新的镜像中,可以回滚以前的配置 ,所以体积会比较大;
Dockerfile 制作镜像
dockerfile 制作镜像是更标准的方式
常见问题
docker commit
docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
REPOSITORY : 不支持大写字母,不然会出现以下错误
alex@Alex ~ docker commit -m "add hello.c" -a "AlexLin" 04727fbe69a3 AlexUbuntu
invalid reference format