docker镜像

 

一、制作镜像

 

制作镜像题目前置条件:CentOS7,需要安装有docker服务

 

1、明确镜像要求:

如何远程给服务器做镜像 服务器怎么做镜像_服务器

 

 

 

2、docker hub寻找合适的镜像:

(注意:寻找镜像时,不找无run启动命令的镜像)

无特殊要求,开始制作镜像。

首先根据镜像要求从docker hub上寻找对应的镜像,该题目需要php镜像,需要php运行服务器,一般而言使用apache。

如图所示镜像是根据寻找找到的可用镜像

 

如何远程给服务器做镜像 服务器怎么做镜像_php_02

 

 

 

 

 

 

3、docker服务器下载镜像

如图所示,通过docker pull命令下载镜像

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_03

 

 

 

 

 

4、查看镜像

 

如何远程给服务器做镜像 服务器怎么做镜像_服务器_04

 

 

 

 

5、启动镜像 docker run -tid 镜像名:版本号(如果TAG为latest,则不用加版本号)

 

如何远程给服务器做镜像 服务器怎么做镜像_php_05

 

 

 

6、查找镜像对应的端口

 

如何远程给服务器做镜像 服务器怎么做镜像_php_06

 

 

 

7、根据镜像对应的端口启动镜像

docker run -tid -p XX:XX 镜像名:版本号

(前边的XX代表虚拟机的端口,后面的XX代表容器的端口,容器的端口是通过刚刚找到的)

 

如何远程给服务器做镜像 服务器怎么做镜像_php_07

 

 

 

8、无特殊镜像制作要求的情况下,将题目文件上传到对应的docker容器中

分三步进行,第一步:将文件上传到linux服务器中

 

 

第二步:找到docker容器进入的目录位置:

docker exec -it 容器id /bin/bash

(默认进入容器内部的命令为/bin/bash或者是/bin/sh)

然后pwd查看当前路径

 

如何远程给服务器做镜像 服务器怎么做镜像_服务器_08

 

 

 

第三步:将linux文件上传到docker容器对应的目录中:

docker cp 文件名 容器id:容器目录

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_09

 

 

 

9、打开浏览器访问

ip地址加端口(linux服务器ip+启动命令设置的linux虚拟机端口)

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_10

 

 

发现文件乱码如何解决

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_11

 

 

 

10、解决文件乱码问题:

分以下几步:

第一步,进入docker容器内部,删除docker 容器文件

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_12

 

 

第二步,删除宿主机上的文件

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_13

 

 

第三步,创建一个新文件,直接复制题目内容到新文件中,退出保存

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_14

 

 

如何远程给服务器做镜像 服务器怎么做镜像_php_15

 

 

 

第四步:将文件上传至docker 容器内部(和第8条第三步一样)

docker cp 文件名 容器id:容器目录

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_16

 

 

第五步:浏览器访问

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_17

 

 

 

 

11、把容器做成镜像,

docker commit 容器id 镜像名称

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_18

 

 

 

12、将镜像打成tar包

docker save -o XX.tar 镜像名:版本号

(XX为打包出来的文件名)

如何远程给服务器做镜像 服务器怎么做镜像_服务器_19

镜像制作成功,tar包可用

 

13、tar包加载为镜像

下次使用时:将tar文件上传至服务器,加载镜像即可

docker load --input XXX.tar

 

二:镜像权限问题

1. 根据镜像启动容器

docker run -tid --name {container_name} -p {host_port}:{container_port} {image_id}/{image_name}:{tag}

 

如何远程给服务器做镜像 服务器怎么做镜像_服务器_20

 

 

 

2. 进入容器内部查看权限

docker exec -it {container_id} /bin/bash

 

如何远程给服务器做镜像 服务器怎么做镜像_服务器_21

 

 

 

 

3. 查看当前用户的权限

ps -a

 

如何远程给服务器做镜像 服务器怎么做镜像_php_22

 

 

nginx和php-fpm的主进程(master process)为root用户权限;下方的nginx权限为nginx用户的权限,php-fpm权限为root用户的权限。当php进程的权限为root用户时,可以通过该权限直接对容器环境本身进行随意破坏,这样不行,需要修改php普通用户的权限。

 

4. 修改用户权限

cd /usr/local/etc

ls

vi php-fpm.conf

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_23

 

 

如何远程给服务器做镜像 服务器怎么做镜像_服务器_24

 

 

 

 

 

将文件内容修改为以下图片所示,修改user=root为user=www-data,修改listen.owner=root为listen.owner=www-data。

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_25

 

 

ps -a查看权限,配置完成之后,查看配置并未生效,需要对php重启使配置生效

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_26

 

 

supervisorctl status查看docker容器当前运行的应用

 

supervisorctl stop php 停止

supervisorctl start php 开启

效果等同于重启

supervisorctl restart php 重启

 

如何远程给服务器做镜像 服务器怎么做镜像_docker_27

 

 

 

再次通过ps -a查看当前进程权限

 

如何远程给服务器做镜像 服务器怎么做镜像_php_28

 

 

用户权限已经改好了

 

 

5. 修改上传文件权限

在通过docker exec -it {container_id} /bin/bash进入容器内部的默认路径下执行

ls

mkdir upload

ls -al

新建的upload文件夹的权限为root:root(权限为root:root时,普通用户无法对文件夹进行写入,没有root权限,需要修改为普通用户也能访问)

chown [-R] 账号名称:用户组名称 文件或目录

chown www-data:www-data upload/

ls -al 查看权限的时候能看到upload文件夹权限用户以及用户组都变成了www-data www-data

 

如何远程给服务器做镜像 服务器怎么做镜像_如何远程给服务器做镜像_29

 

 

用户上传文件夹权限已经修改完毕,可以让用户上传文件。

 

6. 把容器做成镜像

docker commit {container_id} {image_name}:{tag}

 

如何远程给服务器做镜像 服务器怎么做镜像_php_30

 

 

 

7. 将镜像打成tar包

docker save -o XX.tar {image_name}:{tag}

 

如何远程给服务器做镜像 服务器怎么做镜像_php_31

 

 

 

8. tar包加载为镜像

下次使用时:将tar文件上传至服务器,加载镜像即可

docker load --input XXX.tar