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