1.安装

1.1.Linux 上安装

操作系统的配置安装可以参考 Linux 系统生产环境配置指南 ​​https://blog.51cto.com/waringid/5782872​

内核要求3.10或以上版本

系统架构要求64位(x86_64)

a、安装

curl https://get.docker.com > /tmp/install_docker.sh
cat /tmp/install_docker.sh
chmod +x /tmp/install_docker.sh
/tmp/install_docker.sh

b、禁止SELinux

sudo setenforce 0

c、不使用 sudo 执行 docker

sudo usermod -aG docker $USER

1.2.其他系统安装

Windows 和 MAC 系统的容器安装参考Destop工具,如官网所示。​​https://docs.docker.com/ee/desktop/​

1.3.确认版本

docker version

容器指南之第一个容器_容器安装配置基础

2.常用操作

2.1.运行镜像

docker run debian echo "hello world"

容器指南之第一个容器_第一个容器_02

debian 是使用的镜像名称,Docker 从 Docker Hub 下载 Debian 的最新版本的镜像。可以通过以下的指令执行容器中的 Shell。

默认情况下新的镜像从 Docker Hub 在线下载,国内速度较慢,可以使用镜像加速的方式

容器指南之第一个容器_第一个容器_03

docker run -i -t debian /bin/bash

容器指南之第一个容器_docker_04

/bin/bash 表示获得 bash shell 。当退出 shell 时,容器就会停止(主进程运行多久,容器就运行多久)

2.2.基础指令

docker run -h container -i -t debian /bin/bash

容器指南之第一个容器_第一个容器_05

进入 container容器后移动了 /bin 的位置导致该容器无法使用,通过主机端的指令可以看到容器的详细信息。

docker ps
docker inspect wizardly_burnell

容器指南之第一个容器_容器安装配置基础_06

docker inspect wizardly_burnell |grep IPAddress
docker inspect --format {{}.NetworkSettings.IPAddress}} wizardly_burnell

容器指南之第一个容器_docker_07

docker diff wizardly_burnell

容器指南之第一个容器_docker_08

可以看到在这个容器内,哪些文件被改动过;例如被删除的 /bin 以及新增的 /basket 和它下面的文件等。

docker logs wizardly_burnell

容器指南之第一个容器_容器安装配置基础_09

查看容器的执行 log 情况。

docker ps -a

容器指南之第一个容器_第一个容器_10

查看所有的容器,包括已经停止的容器。由于之前的容器已被破坏(移动了 /bin,无法正常启动)通过 rm 的容器指令删除。

docker rm wizardly_burnell

容器指南之第一个容器_容器安装配置基础_11

清理已停止的容器

docker rm -v $(docker ps -aq -f status=exited)

创建 cowsay 的容器应用,先启动容器并在容器中安装系统包

docker run -it  --name cowsay --hostname cowsay debian bash
apt-get upudate
apt-get install -y cowsay fortune
/usr/games/fortune | /usr/games/cowsay
exit
docker commit cowsay test/cowsayimage

容器指南之第一个容器_容器安装配置基础_12

容器指南之第一个容器_容器安装配置基础_13

2.3.Dockerfile 创建镜像

mkdir cowsay
cd cowsay
touch Dockerfile
FROM debian:buster
RUN apt-get update && apt-get install -y cowsay fortune

docker build -t test/cowsay-dockerfile .
docker run test/cowsay-dockerfile /usr/games/cowsay "Docker-file"

容器指南之第一个容器_redis_14

进一步可以通 Dockerfile 的 ENTRYPOINT 指令执行可执行文件,同时能处理传给 docker run 的参数。在 Dockerfile 的最后一行加入 ENTRYPOINGT ["/usr/games/cowsay"] 并再次生成新镜像,新生成的镜像可以无需指定 cowsay 指令。

容器指南之第一个容器_第一个容器_15

也可以在 ENTRYPOINT 中指定脚步既简化指令操作又可以保留原有命令的输入能力。在 Dockerfile 同文件夹下新建以下的脚本,然后通过 ENTRYPOINT 命令调用。

#!/bin/bash
if [ $# -eq 0 ]; then
/usr/games/fortune | /usr/games/cowsay
else
/usr/games/cowsay "$@"
fi

Dockerfile

FROM debian:buster
RUN apt-get update && apt-get install -y cowsay fortune
COPY entrypoint.sh /ENTRYPOINT ["/entrypoint.sh"]

容器指南之第一个容器_redis_16

2.4.镜像注册服务

注册(registry)托管和发布镜像的服务,默认为 docker Hub。

仓库(repository)相关镜像的集合

标签(tag)仓库中镜像的识别号,由英文和数字组成。

docker build 创建镜像

docker push 上传镜像(个人,需要注册账户)

docker pull 下载镜像

镜像命名空间

1、字符串和 / 开头

属于个人用户。例如 amouat/reveljs 是用户 amouat 上传的 reveljs 镜像。

2、不包含 /

属于认证组织。例如 debian 是官方镜像的发行版本

3、已主机名或 IP 开头

第三方组织或企业版本

2.5.使用 redis 镜像

1、先下载 redis 镜像然后让它在后台执行

2、通过--link 指令将新的容器 redis 和已运行的容器 myredis 连接起来,并且在新容器中以 redis 作为 myredis 容器的主机名。Docker 会在新容器中的 /etc/hosts 里添加一条新记录,把 redis 指向 myredis 的 IP 地址。

容器指南之第一个容器_redis_17

容器指南之第一个容器_容器安装配置基础_18

docker pull redis
docker run --name myredis -d redis
docker run --rm -it --link myredis:redis redis /bin/bash
redis-cli -h redis -p 6379

数据间的传输和共享通过 Dockerfile 中的 VOLUME 指令或运行时使用 -v 选项。

默认情况下目录或文件会挂载在主机的 Docker 安装目录下(通常是 /var/lib/docker),实际运行时可以指定具体的挂载路径(docker run -d -v /host/dir:/container/dir test/webserver)

可以通过使用 --volumes-from 将新容器连接到 Redis 数据库目录。

VOLUME /data

docker run -v /data test/webserver
docker run --rm -it --link myredis:redis redis /bin/bash
redis-cli -h redis -p 6379
set "persistence" "test"
save
exit
docker run -it --volumes-from myredis -v $(pwd)/backup:/backup debian /bin/bash
cp /data/dump.rdp /backup

容器指南之第一个容器_第一个容器_19

进入容器空间

docker exec -it myredis /bin/bash

3、清理容器

容器指南之第一个容器_redis_20