dockerFile学习
启动容器
docker ps
docker run -it [imageID]
删除容器
docker rm -f $(docker ps -q)
数据卷
容器数据卷,如何持久化容器的数据,防止断电后数据丢失
数据卷
docker run -it -v /宿主机的绝对路径:/容器内目录 镜像名
docker run -it -v /myDataVolume:/dataVolumnContainer
容易停止推出后,主机修改数据仍然可以获取到
* 第一步,编写一个dockerfile脚本,volumn test
FROM centos
VOLUME ["/dataVolumnContainer1","/dataVolumnContainer2"]
CMD echo "finish,success"
CMD /bin/bash
开放端口
参考https://blog.csdn.net/leinminna/article/details/100560036
dockerfile
- dockerfile的构建过程
FROM 基础镜像,当前镜像是基于哪个镜像
MAINTAINER 镜像维护者的姓名和邮箱地址
RUN 容器构建需要运行的命令
EXPOSE 当前容器对外暴露出的端口
WORKDIR 指定创建容器后,终端默认登陆进入的工作目录
ENV 用来在构建镜像中设置环境变量
ADD 将宿主机目录文件拷贝到镜像中并且解压缩
COPY 拷贝文件和目录到镜像中
VOLUME 容器数据卷
CMD 指定一个容器启动的时候运行的命令,dockerfile可以有多个,但是只有最后一个生效
ENTRYPOINT 指定一个容器运行要的命令,追加
ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发
- 自定义一个dockerfile文件
现在我们需要解决三个问题
1.初始的镜像默认路径是/
2.默认不支持vim
3.默认不支持ifconfig
自定义一个dockerfile去解决这个问题
例子1
1.编写dockerfile
from centos
ENV mypath /tmp
WORKER $mypath
RUN yum -y install vim
RUN yum -y install net-tools
EXPOSE 80
CMD /bin/bash
2.BUILD dockerfile
#指定路径制作镜像
docker build -f ${DockerFile path} -t [Container]:[TAG] .
#默认在本路径下生成镜像(本路径下有dockerfile文件)
docker build -t [Container]:[TAG]
网络管理
默认网络
docker network ls
查看容器使用网络的情况
默认网桥docker0
docker network inspect bridge
自定义网络
实际生产环境中,我们要自己定义网络
docker network create --driver bridge isolated_nw
创建完毕之后,我们任然可以看到这个网络是桥接的
现在我们去以这个网络去运行一个名字为nwtest的镜像
docker run -itd --name=nwtest --network=isolated_nw busybox
为容器nwtest添加一种默认的bridge管理方式
docker network connect bridge nwtest
再使用下面命令可以查看情况
docker inspect nwtest
如果要移除这个网络,使用
docker network disconnect isolated_nw nwtest
移除这个自定义网络
docker network rm isolated_nw
容器通信
1.创建两个容器c1,c2
docker run -itd --name=c1 busybox
docker run -itd --name=c2 busybox
2.创建一个自定义的isolated_nw网络(需要预先创建容器)
docker network create --driver bridge isolated_nw
3.然后我们创建一个新的c3容器,使用这个网络
docker run --network=isolated_nw -itd --name=c3 busybox
4.为c2新增一个自定义的网络连接
docker network connect isolated_nw c2
5.现在我们测试下c2,c3的连通性
docker inspect c1,c2获得两个容器的ip,互相ping通就行
docker swarm的使用
Dockerswarm学习链接
docker swarm是docker的一个集群管理工具
1.dockerswarm的架构
2.dockerswarm集群搭建
3.创建docker swarm
在node1上创建swarm集群
docker swarm init --advertise-addr 192.168.59.128
查看管理节点的集群信息
docker node ls
强制删除某个节点
docker swarm leave -f
我们去查看网络也可以看到有个ingress网络
4.向docker swarm添加工作结点,在两个工作结点中分别执行以下的命令(这一步目前如果直接在两台服务器操作就会失败,但是如果使用ssh操作就会成功
添加两个work
结点
docker swarm join --token xxx node2:2377
例如这个🌰
docker swarm join --token SWMTKN-1-3sylqzh0dbytnl1n2ncqtsk725xcvuwpindr4dgweusrq1swnd-cf2je7ppyr4gkpc228ev70uxg 192.168.59.128:2377
这个时候使用docker node ls
就可以看到整个集群节点了
5.部署服务
docker service create --replicas 1 --name helloworld alpine ping docker.com
6.查看docker swarm中的服务
- 查看服务列表
docker service ls
- 查看部署服务的详细信息
docker service inspect 服务名称
- 查看服务在集群节点上的分配以及运行状况
docker service ps 服务名称
7.修改副本数量
- 在manager上修改服务副本的数量
docker service scale helloworld=5
8.删除服务
docker service rm 服务名称
9.部署一个Nginx服务
- 在manager上创建一个overlay为驱动的网络
docker network create -d=overlay my-multi-host-network
- 在集群管理节点部署一个nginx服务
docker service create \
--name my-web \
--network my-multi-host-network \
-p 8080:80 \
--replicas 2 \
nginx
接下来我们使用docker service ps my-web
就可以看到服务了
Docker Compose使用
1.docker-compose是基于python的,使用pip安装
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple docker-compose==1.24.1
查看版本
docker-compose -version