Docker 离线安装及基础操作使用教程

Docker 离线安装

此方式适用于没有互联网的机器安装 Docker,绿色配置安装。

该方法官方文档上面已经有说明了,参照:https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries

下载离线包

我们选择的是 64 位的二进制包,浏览地址:https://download.docker.com/linux/static/stable/

选择下载最新安装包:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.3.tgz

本机直接下载

cd /home
wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.3.tgz

解压安装包

将下载到的文件移植到需要安装的机器上,进行解压。

tar -xzvf docker-19.03.3.tgz

复制文件

将 docker 二进制文件复制到系统运行目录下

sudo cp docker/* /usr/bin/

注册服务

创建服务文件,将 docker 注册为系统服务。

新建文件:/etc/systemd/system/docker.service

内容如下

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

 

[Install]

WantedBy=multi-user.target

赋予执行权限

chmod +x /etc/systemd/system/docker.service

重载 unit 配置文件

systemctl daemon-reload

启动 docker 服务

systemctl start docker 

设置开启自启

systemctl enable docker.service 

查看 docker 版本

docker -v 

获取 Docker 镜像

此方式目前只找到通过互联网机器获取镜像,并将其镜像导出供内网机器使用。

CDN 源镜像

由于 docker 源镜像访问较慢,我们替换为其他源 CDN,使得拉取 docker 镜像更快速。

编辑 docker 配置,如果文件不存在,请先创建:/etc/docker/daemon.json

{
  "registry-mirrors":["https://reg-mirror.qiniu.com/"],
  "log-driver":"json-file",
  "log-opts": {"max-size":"10m", "max-file":"3"}
}

保存后重启 docker

sudo systemctl daemon-reload
sudo systemctl restart docker

更多源镜像配置方式,可参照:https://www.cnblogs.com/wushuaishuai/p/9984228.html

获取 docker 基础镜像(Image)

通过搜索,查找有哪些镜像

docker search debian

拉取镜像

推荐 alpine 或者 debian 作为基础操作系统镜像

下表是官方镜像的大小比较:

REPOSITORY          TAG           IMAGE ID          VIRTUAL SIZE
alpine              latest        4e38e38c8ce0      4.799 MB
debian              latest        4d6ce913b130      84.98 MB
ubuntu              latest        b39b81afc8ca      188.3 MB
centos              latest        8efe422e6104      210 MB

测试拉取 alpine 镜像

$ docker run alpine echo '123'
123

我们这里将 debian 和 alpine 一并拉取

docker pull debian
docker pull alpine

保存镜像(制作离线包)

将镜像打包,离线存储,给其他内网机器使用

sudo docker save -o debian_image.docker debian

其他机器导入镜像

sudo docker load -i debian_image.docker

更多参考 docker 官方文档:https://docs.docker.com/engine/reference/commandline/save/

容器使用

简单介绍下容器的使用,这里依照上文,采用 debian 镜像作为基础,进行实例容器。

如果你是直接运行载入镜像,docker 会把镜像记载完毕后,正常退出。

如:docker run debian

$ docker run debian
$ docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS                  NAMES
8e5176a1cbf8        debian              "bash"              3 seconds ago       Exited (0) 3 seconds ago                          peaceful_poitras

查看容器进程方法为:docker ps 默认只会显示目前在运行的 docker 进程,如果需要显示所有,需要增加 -a 参数。

可以看到上面刚刚初始化的容器,在 3 秒前创建完毕,且在 3 秒前正常退出。意味着这个容器的生命周期已经结束。

如果想进入容器,做更多的配置那就需要附加额外启动参数,以交互模式启动容器。

如:docker run -it debian 

$ docker run -it debian
root@4b0655852c0b:/$ 

创建完毕后,会直接连接进终端,且退出后,这个容器的生命周期也就结束了。

也可以通过后台进程的创建方式运行,即如下:

$ docker run -d -it debian
9b0d9b593b27621aa6c4758b4a2a5690e14c4e7d412af5547266ce975d6f904a

同样,刚刚创建的这个容器也可以通过进程查看到。

$ docker ps -l
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS               NAMES
9b0d9b593b27        debian              "bash"              25 seconds ago      Up 24 seconds                           nifty_kirch

如果再次想连接到这个容器中,只需要对这个容器执行 bash 命令即可。(9b0d9b593b27  是上面创建的容器 ID,也可以通过 docker ps  查看到)

$ docker exec -it 9b0d9b593b27 /bin/bash
root@9b0d9b593b27:/$

此时,再退出这个终端,容器不会断掉,因为此前我们通过的是后台驻留的方式创建的。也是存在一个伪终端链接,只不过没有人操作,所以也就不会因为其他终端连接断掉而断掉。

同时我们如果在容器内所做的改动,也依然会保存。不会因为连接关闭,而丢失。

对于持久化存储,还是推荐官方提供的:Data Volume,参考官方或者 https://blog.csdn.net/yalishadaa/article/details/78565447

针对容器的一些操作:

命名重启

vm1 是容器的名称也可以是 ID,名称在初始化时可以指定 --name vm1,如: 

docker run -d -it --name vm1 debian

重命名容器

如果已经创建容器,可将容器名称 vm1 重命名为 vm2

docker rename vm1 vm2

关闭容器

docker stop vm1

启动容器

docker start vm1

重启容器

docker restart vm1

结束容器

docker kill vm1

更多常用操作命令,参见:https://www.runoob.com/docker/docker-command-manual.html

映射端口

如果你有 nginx 或者 ssh 端口需要暴露给外部使用,可以通过此方式进行映射。

docker run -d -it -p 0.0.0.0:2222:22 -p 8080:80 -p 4443:443 --name vm1 debian

解释上面命令:

-d 以后台方式创建运行

-it 以伪终端方式

-p 映射端口,分别映射了外部的 2222 到内部的 22 端口(SSH),外部的 8080 到内部的 80(HTTP),外部的 4443 映射到内部的 443(HTTPS)

--name 命名容器为 vm1

这里外部的 2222 端口,指定了主机名 0.0.0.0,意味着所有机器都可以访问,也可以指定为 127.0.0.1

可视化管理面板

Portainer 是一个轻量级的 Docker 管理面板,和 Rancher 这种重量级选手没法比,Portainer 倾向于单机的管理(后来发现能够添加多个单机节点切换着管理),当然,在 Docker 搞出 Swarm 之后 Portainer 也借此实现了集群管理。

官方 demo 体验:

http://demo.portainer.io/

用户名:admin

密码:tryportainer

安装

查看当前有哪些 Portainer 镜像

docker search portainer

下载镜像

docker pull portainer/portainer

运行

这里创建 portainer/portainer 的容器,起名为 portainer-test,由于 9000 端口占用,并将 8800 端口映射到容器内的 9000 端口。

docker run -d -p 8800:9000 \
    --restart=always \
    -v /var/run/docker.sock:/var/run/docker.sock \
    --name portainer-test \
    portainer/portainer

通过浏览器访问 8800 端口,首次需要配置管理员密码。

这里选择 local 单机版

可以简单看到我们的 docker 宿主机

当前 local 宿主机中有之前创建的 nginx 容器以及这个 portainer 容器在运行中,可以对其进行一些操作,简化了 docker 命令。

中文文档

推荐阅读的中文文档

https://yeasy.gitbooks.io/docker_practice/content/container/run.html

Comments