博文記錄
教程分享 2019-10-09 17:11:44 21 0

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 /path/to/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": ["http://f1361db2.m.daocloud.io"]
}

 

保存后重启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
[email protected]:/$ 

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

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

$ 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
[email protected]:/$

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

 

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

对于持久化存储,还是推荐官方提供的: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

 

發表評論
StudioEIM - 冒险者讲习所
0:00