Sign inSign up

stonekon/php7-nginx-alpine

By stonekon

•Updated over 7 years ago

Image
0

27

stonekon/php7-nginx-alpine repository overview

基于alpine3.9,nginx1.4,php7,开了bash方便进alpine改设置! 原汁原味,无更改!!!

以下存放教程

alpine linux为基础镜像 docker pull gliderlabs/alpine alpine linux 镜像地址

目前最新的tag是3.8版本,镜像只有4M的大小,非常的精简。

运行镜像 docker run -it gliderlabs/alpine 运行后可以看到里面有基本的linux文件系统,这里不做演示,有兴趣者可自行尝试。

安装php 和 nginx apk update apk add php7 nginx 接下来,根据自己的需要可以继续安装php相关扩展包,或者其他linux扩展包。

搜索扩展包,如php7工具包,可通过以下指令:

⁠apk search php7

安装php扩展 apk add php7-mysqli php7-pdo_mysql php7-mbstring php7-json php7-zlib php7-gd php7-intl php7-session php7-fpm php7-memcached 目录结构 php7目录: /etc/php7 nginx目录: /etc/nginx 启动php-fpm和nginx

⁠先创建pid文件,否则nginx运行不了

mkdir /run/nginx touch /run/nginx/nginx.pid

⁠先运行php,再运行nginx

/usr/sbin/php-fpm7 /usr/sbin/nginx 至此,能看到php和nginx正常运行,镜像环境已经基本完成了。 接下来,可以看看怎么把这个镜像保存起来。

创建镜像 另起一个终端,用 docker ps查看镜像ID,如下指令可以保存镜像:

docker commit -a "yisonli" -m "my first php7-nginx" 9d9c6030e5e9 yisonli/php7-nginx-alpine:0.1 注:9d9c6030e5e9为镜像ID,yisonli/php7-nginx-alpine为保存的镜像名,版本定义为0.1

运行新生成的镜像 绑定8080端口看看效果

docker run -it -p 8080:8080 yisonli/php7-nginx-alpine:0.1 手动启动php-fpm和nginx后,浏览器就可看到效果了。 http://127.0.0.1:8080/index.php⁠

docker补充记录 【共享文件夹】

docker run -v pwd/www:/var/www/html -it -p 8080:8080 yisonli/php7-nginx-alpine:0.1 【删除未运行的容器】

docker rm $(docker ps -a -q) 【用Dockerfile方式构建镜像】

docker build -t yisonli/php7-nginx-alpine:0.2 .

[root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

创建一个名为myubuntu的容器 [root@docker-test1 ~]# docker run -ti --name myubuntu -d docker.io/ubuntu [root@docker-test1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 651a8541a47d docker.io/ubuntu "/bin/bash" 37 seconds ago Up 36 seconds myubuntu

docker commit :从容器创建一个新的镜像。

⁠docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

-a :提交的镜像作者; -c :使用Dockerfile指令来创建镜像; -m :提交时的说明文字; -p :在commit时,将容器暂停。

根据这个myubuntu容器提交镜像 [root@docker-test1 ~]# docker commit -a "wangshibo" -m "this is test" 651a8541a47d myubuntu:v1 sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d

再次查看镜像,发现镜像myubuntu:v1已经提交到本地了 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu v1 6ce4aedd12cd 59 seconds ago 84.1 MB docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

在mybuntu:v1镜像推送到docker hub仓库中去

⁠docker push [OPTIONS] NAME[:TAG]

OPTIONS说明: --disable-content-trust :忽略镜像的校验,默认开启

首先是登录docker hub (用户名:wangshibo 密码:*******) [root@docker-test1 ~]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com⁠ to create one. Username (wangshibo): wangshibo Password: Login Succeeded

[root@docker-test1 ~]# docker push wangshibo/myubuntu:v1 The push refers to a repository [docker.io/wangshibo/myubuntu] An image does not exist locally with the tag: docker.io/wangshibo/myubuntu

这里需要将ubuntu:v1镜像改名,在名称前加上自己的docker hub的Docker ID,即wangshibo

[root@docker-test1 ~]# docker tag 6ce4aedd12cd wangshibo/myubuntu:v1 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB wangshibo/myubuntu v1 6ce4aedd12cd 6 minutes ago 84.1 MB docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

再次进行推送(注意:下面的v1的tag标签可以不打,默认是latest)。推送操作时间稍微会有一点长,耐心等待~ [root@docker-test1 ~]# docker push wangshibo/myubuntu:v1
The push refers to a repository [docker.io/wangshibo/myubuntu] b5948ba9486d: Pushed 8d7ea83e3c62: Mounted from library/ubuntu 6a061ee02432: Mounted from library/ubuntu f73b2816c52a: Mounted from library/ubuntu 6267b420796f: Mounted from library/ubuntu a30b835850bf: Mounted from library/ubuntu v1: digest: sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d size: 1564

最后登录自己的Docker Hub,即https://hub.docker.com/⁠ 登录后,在Repositories里面就可以看到自己在上面推送的镜像wangshibo/myubuntu:v1了,这是个对外的镜像,可以在网络上下载。 在Docker hub上可以看到这个镜像的下载命令(注意下载时跟上tag标签,如果是latest的默认tag可以不跟) 也可以直接在Docker hub上删除这个镜像(Repositories-镜像-Settings-delete)

比如在另一台服务器上下载这个镜像 [root@kevin-test ~]# docker pull wangshibo/myubuntu Pulling repository wangshibo/myubuntu Repository not found

需要跟上tag标签 [root@kevin-test ~]# docker pull wangshibo/myubuntu:v1 v1: Pulling from wangshibo/myubuntu 68e2a091ef24: Pull complete 8f9dd35f6299: Pull complete a81a6171600b: Pull complete a211a2bc7010: Pull complete 9e71a0b4f83a: Pull complete 0cf75bb335aa: Pull complete c393a882769e: Pull complete Digest: sha256:845fa3dcc9d0de1b9c701e1009918995da35a29012015f6c297a05edc489e018 Status: Downloaded newer image for wangshibo/myubuntu:v1 [root@kevin-test ~]# docker images REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE wangshibo/myubuntu v1 c393a882769e 12 minutes ago 84.11 MB

在本机删除这个镜像 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

注意上面有两个6ce4aedd12cd的镜像ID,此时直接使用这个镜像ID是删除不掉的 [root@docker-test1 ~]# docker rmi 6ce4aedd12cd Error response from daemon: conflict: unable to delete 6ce4aedd12cd (must be forced) - image is referenced in multiple repositories

应该先删除docker tag改名前的镜像,使用镜像名称删除。(一般在docker tag镜像改名后,最好删除改名前的镜像) [root@docker-test1 ~]# docker rmi myubuntu:v1 Untagged: myubuntu:v1 Untagged: wangshibo/myubuntu@sha256:e9cd9075d262848a307c92751e1a5890d883b814a31abd118161442461a1ca2d

[root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE wangshibo/myubuntu v1 6ce4aedd12cd 15 minutes ago 84.1 MB docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB

这个时候就可以删除镜像ID删除了 [root@docker-test1 ~]# docker rmi 6ce4aedd12cd Untagged: wangshibo/myubuntu:v1 Deleted: sha256:6ce4aedd12cda693d0bbb857cc443a56f9f569106e09ec61aa53563d0932ea4d Deleted: sha256:0ddeb6a16badd042914c2e72b9ef0331550c1cdcc4bdc6650a90cd9f57f1501b [root@docker-test1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/ubuntu 16.04 7aa3602ab41e 5 weeks ago 115 MB =================================删除镜像失败一例分享==================================

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 [root@docker-test1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@docker-test1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

打算删除掉docker的nginx镜像, 但是发现这个镜像就是删除不了,加了-f强制删除也不行,一直报Error: No such image的错误, 最后终于找到了办法直接删除文件!

[root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx latest 62f816a209e6 7 days ago 109MB

[root@docker-test1 ~]# docker rmi nginx Error: No such image: nginx

[root@docker-test1 ~]# docker rmi 62f816a209e6 Error: No such image: 62f816a209e6

[root@docker-test1 ~]# docker rmi 62f816a209e6 -f Error: No such image: 62f816a209e6

如上,怎么都删除不掉nginx镜像!!!!!

处理办法: [root@docker-test1 ~]# systemctl stop docker [root@docker-test1 ~]# rm -rf /var/lib/docker rm: cannot remove ‘/var/lib/docker/containers’: Device or resource busy

删除不了的原因是: 在建立容器的时候做了相应目录的挂载,没有卸载,所以Device or resource busy

解决办法: 查找挂载的目录并卸载 [root@docker-test1 ~]# cat /proc/mounts | grep "docker" /dev/mapper/centos-root /var/lib/docker/containers xfs rw,relatime,attr2,inode64,noquota 0 0 proc /run/docker/netns/default proc rw,nosuid,nodev,noexec,relatime 0 0 proc /run/docker/netns/a0626c54fd03 proc rw,nosuid,nodev,noexec,relatime 0 0 proc /run/docker/netns/b18072de4224 proc rw,nosuid,nodev,noexec,relatime 0 0 proc /run/docker/netns/b5298f643455 proc rw,nosuid,nodev,noexec,relatime 0 0 proc /run/docker/netns/9f5e97637c98 proc rw,nosuid,nodev,noexec,relatime 0 0

[root@docker-test1 ~]# umount /var/lib/docker/containers [root@docker-test1 ~]# rm -rf /var/lib/docker

[root@docker-test1 ~]# systemctl start docker

再次查看就没有这个镜像了 [root@docker-test1 ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE

Tag summary

Content type

Image

Digest

Size

26.9 MB

Last updated

over 7 years ago

docker pull stonekon/php7-nginx-alpine:0.1