armbian docker Chrome_docker系列文章(一) - 零Linux基础安装docker

1e0a7b9433a0de7980045988ede9a588.png
本文目的:在Linux上可以运行docker,顺带说说一些Linux系统的常识(例如systemctl怎么配置,或者软连接啥意思),就是没怎么玩过Linux的人可能有用,玩过Linux的可以忽略此文,自行安装
本系列目的:从入门到实践,最后会完成一个可投入生产的一个实践,刚刚开始比较基础,后面慢慢的深入
环境:centos7

1、下载docker

下载地址:https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz 可以自己选最新的稳定版本(我这里的目录是 Linux / 静态二进制文件 / 64位 / 19.03.5版本 )的软件压缩包,也可以自己找到自己想要的版本。(二进制文件的意思就是机器可以执行的文件) 然后想方设法搞到你的服务器例如:

wget https://download.docker.com/linux/static/stable/x86_64/docker-19.03.5.tgz

或者你直接下载后FTP到服务器。 这个下载有可能被墙,你们自己看着办。

[root@localhost docker-static]# ll
total 61772
-rw-r--r-- 1 root root 63252595 Nov 14 13:25 docker-19.03.5.tgz

2、安装docker

官方文档:https://docs.docker.com/install/linux/docker-ce/binaries/#install-static-binaries 其实已经很简单粗暴了

A、解压:

tar xzvf docker-19.03.5.tgz ## 以为我这里下载下来的名字是docker-19.03.5.tgz,你们可以根据自己下载下来的包的名字改:tar xzvf 包名,来进行解压

这时候解压出来如下

[root@localhost docker-static]# ll
total 61772
drwxrwxr-x 2 1000 1000      138 Nov 13 02:30 docker
-rw-r--r-- 1 root root 63252595 Nov 14 13:25 docker-19.03.5.tgz

B、复制到/usr/bin/

然后CP这个docker目录到/usr/bin,因为我们在输入命令例如:yum/wget/vim之类的命令的时候,Linux就会跑到这个目录下面找下是否有这个目录或者文件 然后去执行,你也可以建立软链接进行关联,这么做可能大概的好处是你的系统盘满了,然后程序安装在挂载盘的地方,就弄个链接过来,软连接的功能和win里面的快捷方式是一样的。

做完之后就可以敲下下面第一个命令看看,其实第一个命令的生效就是因为我们把docker复制到/usr/bin中,当我们敲下docker回车的时候 系统就找到 /usr/bin 然后在这个目录下面执行docker是一个道理

[root@localhost docker]# docker -v
Docker version 19.03.5, build 633a0ea838
[root@localhost docker]# /usr/bin/docker -v
Docker version 19.03.5, build 633a0ea838

C、守护dockerd

然后就是守护下dockerd

dockerd &

这里得说明一下的是 docker是一个命令行工具,真正的大佬是dockerd,就类似于数据库中,我们会用Navicat for MySQL去链接mysql,可是我们服务器里面也要启动mysqld服务,这里的docker只是等同于Navicat for MySQL(就是所谓的客户端)而dockerd就等同于mysqld(服务端),不信的话你别执行dockerd试试看:

[root@localhost docker]# docker run hello-world
docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?.

docker问你: Is the docker daemon running?翻译过来就是,你特么docker服务都没启动,叫我来干嘛?

D、完成

当我们启动了dockerd后,第一件事自然就是:hello-world,验证下了

docker run hello-world

然后他就告诉你,hello-world镜像不存在 他在下载,然后下载完成,你就看看镜像,看看容器

[root@localhost docker]# docker images
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
hello-world         latest              fce289e99eb9        11 months ago       1.84kB
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                     PORTS               NAMES
f5e021d859be        hello-world         "/hello"            3 minutes ago       Exited (0) 3 minutes ago                       intelligent_mclean

发现多了东西,run它

Hello from Docker!
This message shows that your installation appears to be working correctly.

To generate this message, Docker took the following steps:
 1. The Docker client contacted the Docker daemon.
 2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
    (amd64)
 3. The Docker daemon created a new container from that image which runs the
    executable that produces the output you are currently reading.
 4. The Docker daemon streamed that output to the Docker client, which sent it
    to your terminal.

3、开机启动dockerd ,并加入centos7-systemctl大家庭

官方文档:https://docs.docker.com/v17.09/engine/admin/systemd/ 当你觉得安装好了之后,开开心心的关闭虚拟机或者因为某些原因重启了服务器,这时候就会发现:咦?我的docker呢,怎么还得再来一次dockerd &啊,这很麻烦,能不能每次都重启的时候就自动启动。 懒惰是第一生产力,恭喜你,进入了无休止的编程折腾系列,可是程序员就应该折腾,遇到问题追究到底,才能收获更多......问题。 dockerd &的意思是让dockerd这个程序在后台运行,然鹅,在你重启服务器的时候,dockerd不会再次自动启动,而在centos7管理各类服务的工具是:systemctl,我们可以通过systemctl进行stop(停止),start(启动),restart(重启),enable(开机启动),disable(取消开机启动)等等的操作。(centos7以下是service,这个怎么弄?升级下服务器或者自己看官方文档去) 好了,迫不及待

[root@localhost docker]# sudo systemctl enable docker
Failed to execute operation: No such file or directory

这是啥意思,就是systemctl其实不是随随便便就能加入的,你需要配置一些东西。官方文档一笔带过。让你自己去搞 这里的配置文件存在:/usr/lib/systemd/system,不过这个是系统文件的比较多,我们怂一点(官方建议),自己的写在:/etc/systemd/system/ 然后我们可以想想安装过的服务,看看别人怎么写的,以下,我在后面加了一些注释

[root@localhost system]# find -name '*nginx*'
./nginx.service
./nginx.service.d
[root@localhost system]# vim nginx.service

[Unit]
## 描述服务干嘛的
Description=The nginx HTTP and reverse proxy server
## 描述服务是啥类型
After=network.target remote-fs.target nss-lookup.target
[Service]
## 告诉系统这是后台运行的形式
Type=forking
## 告保存运行时候pid(也就是进程ID可以PS查看)的文件
PIDFile=/run/nginx.pid
## 启动服务之前执行的命令
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
## 启动服务的时候需要执行的命令
ExecStart=/usr/sbin/nginx
## 重启服务的时候需要执行的命令
ExecReload=/bin/kill -s HUP $MAINPID
## 设置 杀死进程的第一步 
KillSignal=SIGQUIT
## 超时时间
TimeoutStopSec=5
## 设置在单元停止时,杀死进程的方法 process 表示仅杀死主进程
KillMode=process
## 是否使用私有的临时目录
PrivateTmp=true
[Install]
##WantedBy字段:表示该服务所在的 Target.这个展开太多了 不做赘述
WantedBy=multi-user.target

好了,看完nginx的后,是不是胸有成竹的可以自己写一个docker的了,先等等,如果你是用虚拟机的话,麻烦先拍下虚拟机的快照,不然等下修改完重启都启动不了的时候,你就会学会怎么用Linux安全模式进入系统目录进行修复了,为了避免大家学习这个能力,还是老老实实的先备份。

下面是内容(来源于网络https://github.com/moby/moby/blob/master/contrib/init/systemd/docker.service.rpm)

[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target

[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s

[Install]
WantedBy=multi-user.target

保存,然后
[root@localhost docker.service.d]# systemctl start docker
Failed to start docker.service: Unit not found.

怎么肥事,ll查看一下,给他一个755权限
[root@localhost system]# chmod -R 755 ./docker.service.d/*

再来

[root@localhost system]# systemctl status docker.service  
● docker.service - Docker Application
   Loaded: loaded (/etc/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: failed (Result: start-limit) since Mon 2019-12-09 02:39:10 EST; 1min 42s ago
  Process: 405 ExecStart=/usr/bin/dockerd (code=killed, signal=TERM)
 Main PID: 405 (code=killed, signal=TERM)

Dec 09 02:39:10 localhost.localdomain systemd[1]: Failed to start Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service failed.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service holdoff time over, scheduling restart.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Stopped Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: start request repeated too quickly for docker.service
Dec 09 02:39:10 localhost.localdomain systemd[1]: Failed to start Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service failed.
Warning: docker.service changed on disk. Run 'systemctl daemon-reload' to reload units.

嗯?run一下systemctl daemon-reload,好的

root@localhost system]# systemctl status docker.service  
● docker.service
   Loaded: not-found (Reason: No such file or directory)
   Active: failed (Result: start-limit) since Mon 2019-12-09 02:39:10 EST; 4min 2s ago
 Main PID: 405 (code=killed, signal=TERM)

Dec 09 02:39:10 localhost.localdomain systemd[1]: Failed to start Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service failed.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service holdoff time over, scheduling restart.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Stopped Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: start request repeated too quickly for docker.service
Dec 09 02:39:10 localhost.localdomain systemd[1]: Failed to start Docker Application.
Dec 09 02:39:10 localhost.localdomain systemd[1]: Unit docker.service entered failed state.
Dec 09 02:39:10 localhost.localdomain systemd[1]: docker.service failed.

哦?是不是刚刚启动的dockerd捣鬼,然后就是设置下开机启动systemctl enable docker

[root@localhost system]# ps -aux | grep dockerd
root       738  0.0  0.0 112712   964 pts/0    R+   02:44   0:00 grep --color=auto dockerd
root     29593  0.0  2.9 443904 54720 pts/1    Sl   00:25   0:04 dockerd
[root@localhost system]# kill -9 29593
[root@localhost ~]# sudo systemctl start docker
[root@localhost ~]# ps -aux | grep dockerd
root      9855  0.1  1.9 500988 36772 ?        Ssl  03:00   0:00 /usr/bin/dockerd
root     10060  0.0  0.0 112712   960 pts/0    R+   03:01   0:00 grep --color=auto dockerd
[root@localhost ~]# docker -v
Docker version 19.03.5, build 633a0ea838
[root@localhost ~]# sudo systemctl enable docker
Created symlink from /etc/systemd/system/multi-user.target.wants/docker.service to /etc/systemd/system/docker.service.

重启查询进程,还在,搞定!

不要错过这个系列:可以关注下公众号,里面还有例如mysql啊 数据结构等的技术文章

39315030048e30de9b5c39b2d51e194d.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值