Docker学习笔记(1)——Dockerfile创建镜像

1.了解Dockerfile基本操作

基本操作:

1.FROM指令:FROM : 指定创建镜像的基础镜像
$ FROM ubuntu:latest
2.ENTRYPOINT指令:默认入口命令,在启动容器时作为根命令执行
支持两种格式:
$ ENTRYPOINT ["executable","param1","param2"] (exec运行,推荐)
$ ENTRYPOINT command param1 param2 (shell运行,/bin/sh)
指定多个,最后一个生效
可以被–entrypoint 参数覆盖掉
3.CMD指令:只有一条,作为主进程,也是有同上两种形式
比如ubuntu镜像默认的CMD是/bin/bash,
如果docker run -it ubuntu cat /etc/os-release这就是用 输出系统版本信息指令 替换了 默认的/bin/bash命令,CMD大概就是这样的过程。
4.RUN指令:在当前镜像基础上运行指定命令,并提交为新的镜像,命令较长时可以使用\来换行
$ RUN apt-get update\
          && apt-get install -y libsnappy-dev\
          && rm -rf /var/cache/apt
注意及时删除一些临时文件和缓存文件,特别是在apt-get指令后,/var/cache/apt下面会缓存一些安装包。
5.ENV命令:指定环境变量,ENV < key>< value>或ENV< key>=< value>
$ ENV PG_MAJOR 9.3
6.VOLUME命令:创建一个数据卷挂载点
$ VOLUME ["/data"]
7.WORKDIR命令:为后续的RUN,CMD,ENTRYPOINT指定配置工作目录
参数是相对路径:
$ WORKDIR /a
$ WORKDIR b
$ WORKDIR c
实际路径:/a/b/c
声明镜像内服务所监听的端口,只是生命作用,并不会端口映射,可以使用容器中-P来完成端口映射。
8.ADD命令:将dockerfile 所在同一目录下的文件可以新建写入容器中 ADD sourcefile destfile
$ ADD authorized_keys /root/.ssh/authorized_keys
9.MAINTAINER命令:指定作者,格式如下
$ MAINTAINER docker_user (user@docker.com)

创建镜像:

1.创建Dockerfile文件,在任意路径下创建即可”Dockerfile”
2.输入如下创建命令即可

这里写图片描述

2.使用两个链接在一起的容器运行Wordpress博客程序

首先下载相关镜像
$ sudo docker pull wordpress
$ sudo docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
85b1f47fba49: Already exists 
5671503d4f93: Pull complete 
3b43b3b913cb: Pull complete 
4fbb803665d0: Pull complete 
05808866e6f9: Pull complete 
1d8c65d48cfa: Pull complete 
e189e187b2b5: Pull complete 
02d3e6011ee8: Pull complete 
d43b32d5ce04: Pull complete 
2a809168ab45: Pull complete 
Digest: sha256:1a2f9361228e9b10b4c77a651b460828514845dc7ac51735b919c2c4aec864b7
Status: Downloaded newer image for mysql:latest
查看是否下载镜像,启动MySQL容器,通过设置MYSQL_ROOT_PASSWORD环境变量来设置密码。
$sudo docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpress -d mysql
8a34bd9e46a7f77c6a5fc9c685041065405dd504140a396041af7a23e274bd4d
将wordpress用–link方式链接到mysql容器,Docker会自动进行网络配置,让Wordpress能够访问到容器所暴露出来的端口。两个容器都会以守护态方式运行,wordpress容器的80端口会映射到宿主机的80端口。
$sudo docker run --name wordpress --link mysqlwp:mysql -p 80:80 -d wordpress
997a113f5c55882488e9e0f7176feb20d87fb88ad92272555fc92f3eb16c223a
之后使用ifconfig去查询docker host的ip
sudo ifconfig
docker0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
    inet 172.17.0.1  netmask 255.255.0.0  broadcast 0.0.0.0
    ...
连接http://172.17.0.1即可进入wordpress安装界面,安装成功后登录即可到主页面

这里写图片描述

wordpress使用的是root用户这并不是一个好实践,创建一个名为wordpress的数据库
把之前的容器关闭删掉之后(关闭之后其链接的wordpress容器也会终止),创建容器如下
$sudo docker run --name mysqlwp -e MYSQL_ROOT_PASSWORD=wordpressdocker \
> -e MYSQL_DATABASE=wordpress \
> -e MYSQL_USER=wordpress \
> -e MYSQL_PASSWORD=wordpresspwd \
> -v /home/docker/mysql:/var/lib/mysql \
> -d mysql
3346d944abb77b49760de11de72de60ba9d64d550eb29f63887e059dbe503d70
启动wordpress并指定你设置好的数据表
$ sudo docker run --name wordpress --link mysqlwp:mysql -p 80:80 \
> -e WORDPRESS_DB_NAME=wordpress \
> -e WORDPRESS_DB_USER=wordpress \
> -e WORDPRESS_DB_PASSWORD=wordpresspwd \
> -d wordpress
e91fb9e547aef33cb27c485f778cf3575fda088ea966723e79400598e199d755
(注意挂载到之前已经存在的目录下)
之后目录下会看到文件变动:
/home/docker/mysql$ ls
auto.cnf         client-key.pem  ib_logfile1         private_key.pem  sys
ca-key.pem       ib_buffer_pool  ibtmp1              public_key.pem   wordpress
ca.pem           ibdata1         mysql               server-cert.pem
client-cert.pem  ib_logfile0     performance_schema  server-key.pem
备份数据(使用exec mysqlwp再容器内,执行mysqldump完成备份
$ sudo docker exec mysqlwp mysqldump --all-databases \
> --password=wordpressdocker > wordpress.backup
在宿主机和容器之间共享数据($PWD表示当前绝对路径)挂载到宿主机上,在/bin/bash操作即可链接起来
$ sudo docker run -ti -v "$PWD":/docker ubuntu:latest /bin/bash
root@61c64c249bad:/# touch /docker/mysql
root@61c64c249bad:/# exit
exit
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Docker Swarm是Docker的原生集群管理工具,可以用于在多个主机上运行和管理容器。Dockerfile是一种用于定义Docker镜像构建过程的文本文件。 使用Docker Swarm时,可以使用Dockerfile创建镜像,但其实创建镜像的过程与在单个主机上创建镜像的过程非常相似。主要的区别是,在Swarm创建镜像将会在整个集群被使用,而非仅限于单个主机。 首先,在Swarm集群的主节点上创建一个Dockerfile,该文件包含了构建镜像的指令和配置。以一个简单的Node.js应用为例,可以定义如下的Dockerfile: ``` FROM node:14-alpine WORKDIR /app COPY package*.json ./ RUN npm install COPY . . EXPOSE 3000 CMD [ "npm", "start" ] ``` 然后,在主节点的终端,使用`docker build`命令来构建镜像。例如,使用以下命令创建一个名为`my-app`的镜像: ``` docker build -t my-app . ``` 接下来,使用`docker push`命令将构建好的镜像推送到Docker镜像仓库。例如,可以推送到Docker Hub: ``` docker push username/my-app ``` 最后,在Swarm集群的其他节点上使用`docker service`命令来创建服务,并使用先前构建的镜像作为服务的副本。例如,使用以下命令创建一个名为`my-app`的服务: ``` docker service create --name my-app --replicas 3 username/my-app ``` 这将在集群的多个节点上运行三个容器的副本,以提供高可用性和负载均衡的服务。 通过以上步骤,我们可以使用DockerfileDocker Swarm集群创建镜像,并在集群运行多个容器的副本来提供服务。这种方式使得应用程序可以更加灵活地在集群运行,并可以根据需要进行扩展和管理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值