前面文章中,我们已经介绍了docker的安装和使用方法,这篇文章我们来继续探索打包自己的镜像,实现一次部署,重复使用。
以安装PHP为例:可以有两种方法:
第一种方法,拉取官方的镜像:
docker pull php:8.0-fpm
docker run -itd --name myphp8.0 php
以上两步可以一步实现:
docker run -itd --name myphp8.0 php:8.0-fpm
docker ps 查看容器的运行状态
运行php容器后,
docker exec -it myphp8.0 /bin/bash 进入容器
这时我们可以容器内作任何我们想做的操作,就像在真实的机子一样。如要安装php 扩展、安装一新必要的软件等。
第二种方法就是能过编写dockerfile直接完成:
FROM php:8.0-fpm
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && \
install-php-extensions gd xdebug redis mongodb
RUN apt-get update && apt-get install -y git vim zlib1g-dev wget libssl-dev
# install cmake
RUN cd /tmp && wget https://github.com/Kitware/CMake/releases/download/v3.16.1/cmake-3.16.1.tar.gz && tar xzf cmake-3.16.1.tar.gz && cd cmake-3.16.1 && ./bootstrap && make -j8 && make install
RUN cd /tmp && rm -r cmake-3.16.1 && rm cmake-3.16.1.tar.gz
# install golang
RUN cd /tmp && wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
RUN export PATH=$PATH:/usr/local/go/bin
RUN cd /tmp && rm go1.16.6.linux-amd64.tar.gz
RUN mkdir -p /home/go/src && mkdir -p /home/go/bin && mkdir -p /home/go/pkg
现在来执行docker的构建:
docker build -t myphp8.0:v1 .
构建完成后,运行dokcer images 可以查看到两个镜像,分别为php:8.0-fpm 和myphp8.0:v1。
这时可以用刚刚构建的镜像来启动容器了。
docker run -itd --name php8.0 myphp8.0 (这里可以根据需要用-v -p 来映射目录和端口)
这时运行docker ps 可以查看到名字为php8.0的容器已经启动了。
docker exec -it php8.0 /bin/bash 进入容器进一步完善我们需要安装的其实操作。
到这里,我们已经部署好了一个完美的容器环境了。但是如果我们要在另外一台机器上再部署一个同样的环境,我们是不是要做以上相同的操作呢?答案是不需要。
下面一起来实现:
先停止现有容器
docker stop container-name
将容器commit成为一个镜像
docker commit container-name -m "commit log" new-image-name
注意:要将镜像提交到docker hub 上,命名要符合规则: docker.hub的账户名/镜像名
docker stop php8.0
docker commit php8.0 -m "这是我的php镜像" xiaoming/php8
或者把现在的镜像 名称改为规则名称: docker tag old-name new-name
登录docker hub :
执行:docker login
输入帐号密码:(没有帐号密码的请求先去申请)
推送到docker hub:
docker push xiaoming/php8
到这里,我们已经完成了将部署好的容器打包成自己的镜像并提交到自己的docker 账号上。
当我们需要在另一台机器上部署这个容器时,只需要:
docker run -itd --name myphp8.0 xiaoming/php8
docker ps 查看,可以看到我们已经把自己的镜像成功运行起来了。
当一个或者几个容器的启动或关闭我们可以直接用docker stop docker start ,但想一下如果有数十个甚至数百个容器,我还这么去管理容器就会显得有些力不从心了。这时候我们就可以引入docker compose 来管理容器了。
好了,这期就先说到这里,下期我们继续来和大家一起来探讨如何用docker-compose 来管理容器。
如果你喜欢我们的文章,欢迎关注我们的微信公众号,及时收到我们最新的技术文章
回复关键字还可以获取更多技术学习内容哦!