Docker学习笔记(未完结)

4 篇文章 0 订阅
2 篇文章 0 订阅

Docker

Docker基本命令

安装
apt-get update
apt-get install \
    apt-transport-https \
    ca-certificates \
    curl \
    gnupg-agent \
    software-properties-common

apt-get remove docker docker-engine docker.io containerd runc # 先卸载

apt-get install docker-ce docker-ce-cli containerd.io
# 或
apt-get install docker-ce=<VERSION_STRING> docker-ce-cli=<VERSION_STRING> containerd.io
启动
docker run hello-world
查看镜像
docker images
/var/lib/docker # docker默认资源路径
docker inspect 镜像id # docker查看镜像内容
docker进入容器
docker exec -it 容器id 	# 打开一个新bash
docker attach 容器id 		# 进入正在执行命令的容器
docker cp 容器id:容器内路径 当前路径
删除容器
docker rm -f $(docker -ps -aq)			# 删除所有容器
docker rmi -f $(docker images -aq)		# 删除所有镜像

容器数据卷

具象映射
匿名映射
xx映射
-v

DockerFile

DockerFIle:构建文件,定义了步骤,源代码

DockerImages:通过DockerFile构建生成的镜像,最终要发布和运行的产品

DockerFile命令

FROM			# 基础镜像,一切从这里开始构建 (基础镜像 scratch)
MAINTAINER		# 作者信息
RUN				# 镜像构建时,需要运行的命令
ADD
WORKDIR			# 镜像的工作目录
VOLUME			# 设置挂载的位置
EXPOSE			# 暴露端口
RUN
CMD				# 指定容器启动时,要运行的指令,只有最后一个会生效,可以被replace
ENTRYPOINT		# 可以追加命令的cmd
ONBUILD			# 当build一个被继承的DockerFile时会运行此指令,触发指令
COPY			# 类似ADD,将文件copy镜像中(不会自动解压)
ENV				# 构建的时候,设置环境变量

构建一个DockerFile

(dockerfie类似于makefile,通过dockerfile来构建docker,不同的是,dockerfile的每行指令单独形成一层)

#		1、编写DockerFile文件
FROM centos
MAINTAINER wandugu<wandugu@126.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN apt-get install vim
RUN apt-get install net-tools

EXPOSE 80

CMD echo $MYPATH
CMD echo "====end===="
CMD /bin/bash
#		2、通过DockerFile build 成镜像
docker build -f dockerfilename -t mycentos:0.1 .
docker history 镜像id		# 查看构件过程

Tomcat镜像

  1. 准备镜像文件 tomcat压缩包、jdk压缩包

  2. 编写DockerFile文件,官方命名Dockerfile,如果是这个名字,就不用-f再指定文件名了

  3. build

  4. 发布(百度web.xml)

发布镜像

1、发布到docker hub

# docker login --help
docker login -u wandugu
docker push wandugu/image_name:ver
# docker tag image_id tag_name:tag_ver

2、发布到阿里云

Docker网络

Docker0

测试

ip addr	# 扩展知识
lo: 本机回环地址
eth0: 阿里云内网地址
docker0: docker0地址

三个网络(linux+2个容器)

# docker 如何处理容器内网络访问
docker run -d -P --name tomcat_name tomcat
# 查看容器内部网络地址 ip addr, 容器启动时,会得到一个eth0@ifxxx 的ip地址,docker分配的
docker exec -it tomcat_name ip addr

# linux 可以 ping 通 docker 容器内部

原理

我们每启动一个容器,docker就会给容器分配一个ip,只要安装了docker,就会生成一个网卡docker0

# 桥接模式: 使用的是 veth-pair 技术
# veth-pair: 就是一堆虚拟设备接口, 一端连着协议,一端彼此相连
# veth-pair 可以充当一个桥梁,连接各种虚拟网络设备
# OpenStack、OVS 的连接,都是使用 veth-pair 技术

容器和容器之间是可以互相通信的

docker0就像一个路由,不同的地址通过其互相通信

–link

docker exec -it tomcat02 ping tomcat01
# ping 不通

docker run -d -P --name tomcat03 --link tomcat02 tomcat
docker exec -it tomcat03 ping tomcat02
# 可以 ping 通
docker exec -it tomcat02 ping tomcat03
# 反向 ping 不通

–link 其实是在 hosts 配置中增加了一个 tomcat02 的映射

docker0:不支持容器名访问

自定义网络

docker network rm 容器id	# 移除网络
docker network ls	# 查看所有网络

网络模式

bridge: 桥接(docker默认)

none: 不配置网络

host: 和宿主机共享网络

container: 容器内网络连通(用得少)

# 直接启动命令 --net bridge, 这个就是docker0
docker run -d -P --name tomcat01 --net bridge tomcat

# docker0 特点: 默认,域名不能访问, --link可以打通连接

# 自定义一个网络
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet
# --driver brideg	连接方式
# --subnet 192.168.0.0/16 子网
# --gateway 192.168.0.1 网关

运行自己创建的网络

docker run -d -P --name tomcat-net-01 mynet comcat
docker run -d -P --name tomcat-net-02 mynet comcat
# 直接可以 ping 通

好处

redis - 不用的集群使用不同的网络,保证集群是安全和健康的

mysql -

网络连通

# 不能直接把两个不用网段的网络连起来(那样就成了一个网段)
# 用一个网段的容器去直接连另一个网段
docker network connect mynet tomcal01
# 连通就是将 tomcat01 放到了 mynet 的配置文件里

部署redis集群

# redis里面只有sh,没有bash

SpringBoot微服务打包Docker镜像

  1. 构建springboot项目
  2. 打包应用
  3. 编写dockerfile
  4. 构建
  5. 发布运行

Docker Compose

Docker Swarm

CI/CD 之 jenkins

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万独孤

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值