Docker Note

一、docker的一些基础概念

1.1 配置Docker使用中国镜像

由于中国国情原因,docker hub最好使用国内的镜像,设置脚本如下:

  • dockerd --registry-mirror=https://registry.docker-cn.com # 使用命令配置
  • curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://ac8437da.m.daocloud.io # lunux一键切换脚本

镜像地址合集:

参考参考:https://www.daocloud.io/mirror#accelerator-doc

二、使用镜像

通用命令:

  • 删除本地镜像:docker rmi [选项] <镜像1> [<镜像2> ...], 在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像 docker image rm
    • 删除虚悬镜像的指令: docker rmi $(docker images -q -f dangling=true)
    • 删除所有仓库名为 redis 的镜像: docker rmi $(docker images -q redis)
    • 删除所有在 mongo:3.2 之前的镜像:docker rmi $(docker images -q -f before=mongo:3.2)

从 Docker Registry 获取镜像的命令是 docker pull。其命令格式为:

docker pull [选项] [Docker Registry地址]<仓库名>:<标签>

具体的选项可以通过 docker pull --help 命令看到,这里我们说一下镜像名称的格式。

Docker Registry 地址:地址的格式一般是 <域名/IP>[:端口号]。默认地址是 Docker Hub。
仓库名:如之前所说,这里的仓库名是两段式名称,即 <用户名>/<软件名>。对于 Docker Hub,如果不给出用户名,则默认为 library,也就是官方镜像。

例子:

1
2
3
4
5
6
7
8
docker pull ubuntu:14.04 # 获取ubuntu 14.04 镜像
docker pull ubuntu:latest # 获取ubuntu 最新LTS版
docker image pull ubunut:17.10 # 在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。
docker container run -it --rm \
ubuntu:17.10 \
bash

运行镜像

1
2
3
4
docker run -it --rm ubuntu:14.04 bash
cat /etc/os-release
exit

docker run 就是运行容器的命令,具体格式我们会在后面的章节讲解,我们这里简要的说明一下上面用到的参数。

  • -it:这是两个参数,一个是 -i:交互式操作,一个是 -t 终端。我们这里打算进入 bash 执行一些命令并查看返回结果,因此我们需要交互式终端。
  • --rm:这个参数是说容器退出后随之将其删除。默认情况下,为了排障需求,退出的容器并不会立即删除,除非手动 docker rm。我们这里只是随便执行个命令,看看结果,不需要排障和保留结果,因此使用 –rm 可以避免浪费空间。
  • ubuntu:14.04:这是指用 ubuntu:14.04 镜像为基础来启动容器。
  • bash:放在镜像名后的是命令,这里我们希望有个交互式 Shell,因此用的是 bash。

进入容器后,我们可以在 Shell 下操作,执行任何所需的命令。这里,我们执行了 cat /etc/os-release,这是 Linux 常用的查看当前系统版本的命令,从返回的结果可以看到容器内是 Ubuntu 14.04.5 LTS 系统。

最后我们通过 exit 退出了这个容器。

1
2
docker run -d -p 7001:7001 -p 9002:9002 -v D:/vm/weblogic/:/u01/oracle/properties store/oracle/weblogic:12.2.1.3 # 指定端口和目录启动weblogc源
docker run -d -p 7001:7001 -p 7002:7002 --restart=always ismaleiva90/weblogic12:latest # 后端启动 ismaleiva90/weblogic12 的latest版本

列出镜像

  • docker images : 查看所有的镜像
  • docker system df : 查看镜像的体积

查看虚悬镜像

  • docker images -f dangling=true: 查看虚悬镜像
    由于新旧镜像同名,旧镜像名称被取消,从而出现仓库名、标签均为 的镜像。这类无标签镜像也被称为 虚悬镜像(dangling image) ,可以用docker images -f dangling=true命令专门显示这类镜像.
    一般来说,虚悬镜像已经失去了存在的价值,是可以随意删除的,可以用下面的命令删除:
    docker rmi $(docker images -q -f dangling=true)
    在 Docker 1.13+ 版本中你可以便捷的使用以下命令来删除虚悬镜像:
    docker image prune

中间层镜像

为了加速镜像构建、重复利用资源,Docker 会利用 中间层镜像。所以在使用一段时间后,可能会看到一些依赖的中间层镜像。默认的 docker images 列表中只会显示顶层镜像,如果希望显示包括中间层镜像在内的所有镜像的话,需要加 -a 参数。

docker images -a

这样会看到很多无标签的镜像,与之前的虚悬镜像不同,这些无标签的镜像很多都是中间层镜像,是其它镜像所依赖的镜像。这些无标签镜像不应该删除,否则会导致上层镜像因为依赖丢失而出错。实际上,这些镜像也没必要删除,因为之前说过,相同的层只会存一遍,而这些镜像是别的镜像的依赖,因此并不会因为它们被列出来而多存了一份,无论如何你也会需要它们。只要删除那些依赖它们的镜像后,这些依赖的中间层镜像也会被连带删除。

更多列出镜像的方法请参考:https://yeasy.gitbooks.io/docker_practice/content/image/list.html

docker commit使用

Dockerfile 定制镜像

1
2
3
4
5
6
7
8
mkdir mynginx
cd mynginx
touch Dockerfile
cat > Dockerfile <<EOF
FROM nginx
RUN echo '<h1>Hello, Docker!</h1>' > /usr/share/nginx/html/index.html
EOF
docker build -t nginx:v3 .

docker build 命令进行镜像构建。其格式为:

docker build [选项] <上下文路径/URL/->

在这里我们指定了最终镜像的名称 -t nginx:v3,构建成功后,我们可以像之前运行 nginx:v2 那样来运行这个镜像,其结果会和 nginx:v2 一样。

在 Docker 1.13+ 版本中推荐使用 docker image 来管理镜像。

docker image build

三、容器使用

进入容器交互模式: docker exec -it {容器名称} bash

范例

docker run -d -p 8081:80 --name webserver nginx

- `-p` 指定端口转发,将容器的80端口转发到本机的8081端口
- `--name webserver` 给容器取别名webserver

docker run -it --rm ubuntu:14.04 bash

- `--rm` 退出后删除
- `-it` 交互模式
- `bash` 使用bash作为交互模式  

四、docker-compose安装和使用

要使用docker-compose,先要检查系统是否加载overlayfs,如果是centos7以上则默认已经加载。可以使用lsmod | grep overlay来检查是否加载,如果没有,则使用如下命令去加载:

1
2
3
# 内核加载overlayfs系统
echo "overlay" > /etc/modules-load.d/overlay.conf
reboot

编辑docker配置文件,让docker使用overlay文件系统

vim /etc/sysconfig/docker

OPTIONS=’–selinux-enabled -s overlay
具体可以参考文章:https://blog.csdn.net/oxo_520/article/details/79873710

1
2
sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose