开源书籍: docker从入门到实践
ubuntu16.04安装
自动安装
curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -
或
curl -sSL https://get.daocloud.io/docker | sh
手动安装
sudo apt-get install apt-transport-https ca-certificates
sudo apt-key adv --keyserver hkp://p80.pool.sks-keyservers.net:80 --recv-keys 58118E89F3A912897C070ADBF76221572C52609D
echo "deb https://apt.dockerproject.org/repo ubuntu-xenial main" | sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install docker-engine
sudo systemctl enable docker
sudo systemctl start docker
sudo groupadd docker
sudo usermod -aG docker $USER
hello world
命令:
docker pull [OPTIONS] NAME[:TAG] #拉取某指定的镜像
docker images [OPTIONS] [REPOSITORY][:TAG] #查看本机镜像
拉取hello-world
docker pull hello-world
由于网络问题,所以到网易蜂巢 镜像中心去拉取:https://c.163.com/hub#/m/home/
docker pull hub.c.163.com/library/hello-world:latest
运行docker
docker run [OPTIONS] image[:TAG] [COMMAND] [ARG]...
运行hello-world
docker run hub.c.163.com/library/hello-world # 全名
运行NGINX
拉取镜像
docker pull hub.c.163.com/library/nginx:latest
后台运行
docker run -d hub.c.163.com/library/nginx:latest # -d表示在后台运行 # 返回容器的id:945649a76bc73b523f00b72ef140a603ed2d106c7f9d9c07ff961f859936fb67
docker exec命令
docker exec -- help
Options:
-d, --detach Detached mode: run command in the background
--detach-keys string Override the key sequence for detaching a container
-e, --env list Set environment variables
--help Print usage
-i, --interactive Keep STDIN open even if not attached
--privileged Give extended privileges to the command
-t, --tty Allocate a pseudo-TTY
-u, --user string Username or UID (format: <name|uid>[:<group|gid>])
执行
docker exec -it 94 bash # 进入nginx所在的Linux环境下的bash
停止docker
docker stop docker-id
docker的网络
docker run -d -P 8080:80 docker-name # -P 把所有监听端口都和主机映射
网络类型
- Bridge:
- Host:与主机共享同一块网卡
- None:没有网络,此时Docker不会与外界发生联系
端口映射
获取镜像
从 Docker Registry 获取镜像的命令是 docker pull。其命令格式为:
bash docker pull [选项] [Docker Registry地址]<仓库名>:<标签>
docker pull --help
运行
docker run 就是运行容器的命令
-it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
--rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 --rm 可以避免浪费空间。
ubuntu:14.04:这是指用 ubuntu:14.04 镜像为基础来启动容器。
bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。
列出镜像
- 要想列出已经下载下来的镜像,可以使用 docker images 命令。
docker images
- 列表包含了仓库名、标签、镜像 ID、创建时间以及所占用的空间。
镜像体积
虚悬镜像
- 由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用下面的命令专门显示这类镜像:
docker images -f dangling=true
- 一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除。
docker rmi $(docker images -q -f dangling=true)
中间层镜像
- 为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。
- 默认的 docker images 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数
docker images -a
列出部分镜像
- 根据仓库名列出镜像
docker images name
docker images ubuntu
docker images ubuntu:16.04
- docker images 还支持强大的过滤器参数 –filter,或者简写 -f
docker images -f since=mongo:3.2
以特定格式显示
利用 commit 理解镜像构成
- 现在让我们以定制一个 Web 服务器为例子,来讲解镜像是如何构建的
docker run --name webserver -d -p 80:80 nginx
这条命令会用 nginx 镜像启动一个容器,命名为 webserver,并且映射了 80 端口,这样我们可以用浏览器去访问这个 nginx 服务器。
。。。。
使用 Dockerfile 定制镜像
….
删除本地镜像
docker rmi [选项] <镜像1> [<镜像2> ...]
用 ID、镜像名、摘要删除镜像。其中,<镜像> 可以是 镜像短 ID、镜像长 ID、镜像名 或者 镜像摘要。
注意 docker rm 命令是删除容器,不要混淆。
用 Docker Images 命令来配合
docker rmi $(docker images -q -f dangling=true)
docker rmi $(docker images -q redis)