背景

因为最近在学docker,而且有oracle的免费机,就像测试测试docker安装宝塔面板的效果。其实通过一系列操作可以学习到挺多docker命令。

安装Docker

首先你的机器上要有docker,如果没有安装的话可以通过下面的命令安装docker。

安装前的准备

这里用的是Oracle免费机来测试,系统为Ubuntu 通过以下命令可以查看OS信息。

root@instance:/home/ubuntu# uname -a
Linux instance 4.15.0-1021-oracle #23-Ubuntu SMP Wed Aug 7 16:35:09 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
root@instance:/home/ubuntu# cat /proc/version
Linux version 4.15.0-1021-oracle (buildd@lgw01-amd64-030) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #23-Ubuntu SMP Wed Aug 7 16:35:09 UTC 2019
root@instance:/home/ubuntu# cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=18.04
DISTRIB_CODENAME=bionic
DISTRIB_DESCRIPTION="Ubuntu 18.04.3 LTS"

Docker 要求 Ubuntu 系统的内核版本高于 3.10 通过以下命令查看

root@instance-20190921-1119:/home/ubuntu# uname -r
4.15.0-1021-oracle

这个机器是4.15 可以安装。

安装Docker的命令

然后这里用的是以下的命令安装docker。官方是使用这里的方法,比较麻烦

#先更新下ubuntu软件库
apt-get update
#通过apt-get安装docker
apt-get install docker.io

查看Docker版本

接着查看docker版本,能显示就是安装成功

root@instance:/home/ubuntu# docker version
Client:
 Version:           18.09.7
 API version:       1.39
 Go version:        go1.10.1
 Git commit:        2d0083d
 Built:             Fri Aug 16 14:20:06 2019
 OS/Arch:           linux/amd64
 Experimental:      false

Server:
 Engine:
  Version:          18.09.7
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.1
  Git commit:       2d0083d
  Built:            Wed Aug 14 19:41:23 2019
  OS/Arch:          linux/amd64
  Experimental:     false

Docker内安装宝塔

拉取系统镜像

先拉取一个系统镜像。这里选了debian,好用又比较小。

docker pull debian

创建运行容器

接着创建和运行容器

docker run -i -t -d --name baota -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 --privileged=true -v /home/www:/www debian

上面命令的意思是创建一个docker容易命名为baota(名称大家自定义)让他后台运行,然后将宿主机的20,21,80,443,888,8888这五个端口映射到docker容器中去。 并且将宿主机的/home/www文件夹映射到docker容器的/www上去(注意:文件目录如果不存在。宿主机和容器会自己创建,无需手动创建)。privileged表示在运行容器的时候,给容器加特权,设置容器有写文件的权限。

查看容器的运行状态和ID

docker ps

进入该容器

docker exec -it d497dcfd6062  /bin/bash(这里也可以直接用 bash)或者下面都行
docker exec -it baota /bin/bash

exec 为在进入容器进行操作

-i :即使没有附加也保持STDIN 打开

-t :分配一个伪终端

这里的d497dcfd6062为上面docker ps得到的容器ID

执行上进入容器命令后会显示下面这样,就是进入了这个Debian容器了

root@e27df07f4a6d:/#

容器内安装宝塔

接着用宝塔官方的安装命令,这里用的是Debian系统下的宝塔安装命令。

wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && bash install.sh

会让你输入y来确认安装,然后就等着装好。

错误信息

错误信息内容

但是这里我最后出现错误

------------------------------------------------------
Error: BT-Task service startup failed.
username: ed5ymzfg
Stopping Bt-Tasks.../etc/init.d/bt: line 76: ps: command not found
        done
Stopping Bt-Panel.../etc/init.d/bt: line 86: ps: command not found
        done
/etc/init.d/bt: line 23: ps: command not found
Starting Bt-Panel..     done
/etc/init.d/bt: line 53: ps: command not found
Starting Bt-Tasks... /etc/init.d/bt: line 58: ps: command not found
failed
------------------------------------------------------
--2019-09-30 02:25:28--  http://103.224.251.67/stop.html
Connecting to 103.224.251.67:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3460 (3.4K) [text/html]
Saving to: '/www/server/stop/index.html'

     0K ...                                                   100%  484M=0s

2019-09-30 02:25:28 (484 MB/s) - '/www/server/stop/index.html' saved [3460/3460]

--2019-09-30 02:25:29--  http://103.224.251.67/stop.html
Connecting to 103.224.251.67:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3460 (3.4K) [text/html]
Saving to: '/www/server/stop/index.html'

     0K ...                                                   100%  568M=0s

2019-09-30 02:25:29 (568 MB/s) - '/www/server/stop/index.html' saved [3460/3460]

------------------------------------------------------
Error: BT-Task service startup failed.
install.sh: line 478: ps: command not found
ERROR: The BT-Panel service startup failed.
============================================

错误原因

我简单看了下,搜索网上解决办法,一个是 https://blog.csdn.net/weixin_42453905/article/details/89399089https://www.daniao.org/3790.html

解决错误

好像是python版本还是python public包和面板冲突的原因,看了下本机python版本为2.7,然后就用下面的命令安装了python3

apt install python3.6

然后解决下public包冲突,接着重启宝塔

pip uninstall public
bt restart 
#或者
/etc/init.d/bt restart

但是这里还是提示错误

Stopping Bt-Tasks.../etc/init.d/bt: line 76: ps: command not found
        done
Stopping Bt-Panel.../etc/init.d/bt: line 86: ps: command not found
        done
/etc/init.d/bt: line 23: ps: command not found
Starting Bt-Panel..     done
/etc/init.d/bt: line 53: ps: command not found
Starting Bt-Tasks... /etc/init.d/bt: line 58: ps: command not found
failed
------------------------------------------------------
--2019-09-30 02:25:28--  http://103.224.251.67/stop.html
Connecting to 103.224.251.67:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3460 (3.4K) [text/html]
Saving to: '/www/server/stop/index.html'

     0K ...                                                   100%  484M=0s

2019-09-30 02:25:28 (484 MB/s) - '/www/server/stop/index.html' saved [3460/3460]

--2019-09-30 02:25:29--  http://103.224.251.67/stop.html
Connecting to 103.224.251.67:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3460 (3.4K) [text/html]
Saving to: '/www/server/stop/index.html'

     0K ...                                                   100%  568M=0s

2019-09-30 02:25:29 (568 MB/s) - '/www/server/stop/index.html' saved [3460/3460]

------------------------------------------------------
Error: BT-Task service startup failed.

现在没了之前的BT-panel无法启动的错误,但是还有ps命令没找到的错误。所以需要安装下ps。 这里参考了这里 https://www.imooc.com/qadetail/217173

apt-get install procps

正常安装后测试一下ps命令,显示以下内容就是安装成功

root@e27df07f4a6d:/# ps
  PID TTY          TIME CMD
    8 pts/1    00:00:00 bash
 5593 pts/1    00:00:03 python
 5669 pts/1    00:00:03 python
 6483 pts/1    00:00:01 python
 6553 pts/1    00:00:01 python
 6653 pts/1    00:00:01 python
 6737 pts/1    00:00:01 python
 6823 pts/1    00:00:01 python
 6899 pts/1    00:00:01 python
 6971 pts/1    00:00:00 ps

然后再重启下宝塔面板试试看

root@e27df07f4a6d:/# /etc/init.d/bt restart
Stopping Bt-Tasks...    done
Stopping Bt-Panel...    done
Starting Bt-Panel.......        done
Starting Bt-Tasks...    done

没有提示错误可以启动。

获取宝塔面板入口

但是这里因为刚才安装没有正常结束,应该最后没有正常显示面板入口 登录用户名密码等信息。

如果你直接进入 https://IP地址:8888 就会显示下面的内容

请使用正确的入口登录面板
错误原因:当前宝塔新安装的已经开启了安全入口登录,新装机器都会随机一个8位字符的安全入口名称,亦可以在面板设置处修改,如您没记录或不记得了,可以使用以下方式解决

解决方法:在SSH终端输入以下一种命令来解决

1.查看面板入口:/etc/init.d/bt default

2.关闭安全入口:rm -f /www/server/panel/data/admin_path.pl

注意:【关闭安全入口】将使您的面板登录地址被直接暴露在互联网上,非常危险,请谨慎操作

根据提示内容,在容器内操作下面的命令来查看面板入口信息。

/etc/init.d/bt default

会显示以下信息,然后用这个地址,用户名密码登陆就可以了

==================================================================
BT-Panel default info!
==================================================================
Bt-Panel-URL: http://IP地址:8888/2bdsdb7ca
username: edsdmzfg
password: 6c750614
Warning:
If you cannot access the panel,
release the following port (8888|888|80|443|20|21) in the security group
==================================================================

设置容器自启

这里我们开头并没有对容器设置了自动启动参数。 如果一开始要设置重启后自动启动容器的话,可以用下面的命令

初次运行时

docker run --restart=always  -i -t -d --name baota -p 20:20 -p 21:21 -p 80:80 -p 443:443 -p 888:888 -p 8888:8888 --privileged=true -v /home/www:/www debian

其实就是docker run的时候加入--restart=always

运行后的容器更新自启设置

如果前面运行的时候没设置自动启动,但是现在想设置的话,可以用下面的命令

docker update --restart=always <CONTAINER ID>

容器ID可以通过docker ps -a或者 docker container ls来查看

root@instance:/home/ubuntu# docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                                                              NAMES
e27df07f4a6d        debian              "bash"              2 hours ago         Up 2 hours          0.0.0.0:20-21->20-21/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:888->888/tcp, 0.0.0.0:8888->8888/tcp   baota
root@instance:/home/ubuntu# docker container ls
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                                                                                                              NAMES
e27df07f4a6d        debian              "bash"              2 hours ago         Up 2 hours          0.0.0.0:20-21->20-21/tcp, 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp, 0.0.0.0:888->888/tcp, 0.0.0.0:8888->8888/tcp   baota

退出容器等操作

退出并停止容器

最后如果要退出容器可以使用 Ctrl+D 或者exit

root@e27df07f4a6d:/# exit
exit

但是这样退出后会停止容器。

退出但是不停止容器

想要退出但是不停止容器就要用 Ctrl+P+Q 这样的话容器还在继续运行中。

停止容器

想要停止运行中的容器就用

docker stop 容器名或者容器ID

运行就用

docker start 容器名或者容器ID

进入容器

如果要进入正在运行的容器就用

docker attach 容器名或者容器ID

或者

docker exec -it 容器名或者容器ID /bin/bash

例如

root@instance:/home/ubuntu# docker exec -it e27 /bin/bash
root@instance:/home/ubuntu# docker attach baota

注:docker的容器ID可以用只取前几位能定位到容器就可以。

参考文章