init commit
This commit is contained in:
123
docs/ops/k8s&docker/Dockerfile和docker-compose.md
Normal file
123
docs/ops/k8s&docker/Dockerfile和docker-compose.md
Normal file
@ -0,0 +1,123 @@
|
||||
---
|
||||
title: Dockerfile和docker-compose
|
||||
---
|
||||
|
||||
## Dockerfile
|
||||
|
||||
> 使用 Dockerfile 构建自己的镜像,这里记录一些常用的命令,这里拿我尝试做的一个 nginx 镜像来记录
|
||||
> [https://github.com/huanl-php/docker-nginx/blob/master/Dockerfile](https://github.com/huanl-php/docker-nginx/blob/master/Dockerfile)
|
||||
|
||||
### FROM alpine:latest
|
||||
|
||||
选择基础的镜像,这里的话我用的是 alpine,后面的 latest 表示最新的版本,alpine 是一个非常小的 linux 发行版,如果你对镜像大小很敏感的话推荐使用这个镜像作为基础镜像
|
||||
|
||||
### LABEL
|
||||
|
||||
这一行表示这个 Dockerfile 的作者
|
||||
|
||||
### ENV
|
||||
|
||||
环境变量,当你没配置的时候将使用这些作为默认值
|
||||
|
||||
### EXPOSE
|
||||
|
||||
声明要暴露的端口,但是并不会直接帮你暴露出去,至少告诉 docker 你会暴露那些
|
||||
|
||||
### RUN
|
||||
|
||||
运行命令,这里用了&和\表示连接命令和换行
|
||||
|
||||
### COPY
|
||||
|
||||
COPY 顾名思义的复制文件 从本地复制到容器里面去
|
||||
|
||||
### CMD
|
||||
|
||||
当你容器启动的时候,将运行的命令,除此之外还有**ENTRYPOINT**
|
||||
|
||||
暂时就先记录这些,以后用到了再继续记录
|
||||
|
||||
### 另外提一下
|
||||
|
||||
使用 alpine 这个的时候有下面这个方法,安装包,卸载包,但是当时我构建我的 nginx 项目的时候 del 之后提示一些包不存在,时间久远我也不记得当时的操作了
|
||||
|
||||
```shell
|
||||
apk add --no-cache --virtual .build-deps gcc
|
||||
apk del .build-deps
|
||||
```
|
||||
|
||||
然后我尝试了这种方法,只删除构建时需要的包,之后我发现我的镜像更小了= =不知道这样做会有什么不好。。。。
|
||||
|
||||
```shell
|
||||
apk add --no-cache gcc
|
||||
apk del gcc
|
||||
```
|
||||
|
||||
## docker-compose.xml
|
||||
|
||||
> compose 用于容器快速部署,我这里用我的云签到的项目来
|
||||
> [https://github.com/CodFrm/cas/blob/master/docker-compose.yml](https://github.com/CodFrm/cas/blob/master/docker-compose.yml) > [文档](https://docs.docker.com/compose/compose-file/)
|
||||
|
||||
### version
|
||||
|
||||
要求版本,不多说了
|
||||
|
||||
### services
|
||||
|
||||
容器服务
|
||||
|
||||
### db 和 web
|
||||
|
||||
都只是一个名字而已
|
||||
|
||||
### image
|
||||
|
||||
容器的镜像名字
|
||||
|
||||
### environment
|
||||
|
||||
环境变量
|
||||
|
||||
### networks
|
||||
|
||||
所属网络环境
|
||||
|
||||
### ports
|
||||
|
||||
暴露端口 外部端口:容器内部端口
|
||||
|
||||
### depends_on
|
||||
|
||||
依赖,会先构建所依赖的容器
|
||||
|
||||
### 根部的 networks
|
||||
|
||||
声明网络,没有将会创建
|
||||
|
||||
### cas_network
|
||||
|
||||
网络的名字
|
||||
|
||||
### driver
|
||||
|
||||
网络驱动类型,我这里是 bridge 桥接
|
||||
|
||||
## 最近用到的
|
||||
|
||||
### build
|
||||
|
||||
build Dockerfile 路径,直接通过 dockerfile 来构建了,不用 image
|
||||
|
||||
### volumes
|
||||
|
||||
和本地路径绑定 本地路径:容器内部路径
|
||||
|
||||
### external_links
|
||||
|
||||
将外部容器加入网络 链接的容器名字:本容器内叫的名字
|
||||
|
||||
### external
|
||||
|
||||
networks 下的一个配置项,允许外部访问 external:true
|
||||
|
||||
先记录到这里,解释是自己的简单理解\>\_\<
|
5
docs/ops/k8s&docker/README.md
Normal file
5
docs/ops/k8s&docker/README.md
Normal file
@ -0,0 +1,5 @@
|
||||
---
|
||||
id: k8s-docker
|
||||
title: Kubernetes & Docker
|
||||
---
|
||||
|
4
docs/ops/k8s&docker/_category_.json
Normal file
4
docs/ops/k8s&docker/_category_.json
Normal file
@ -0,0 +1,4 @@
|
||||
{
|
||||
"label": "K8s & Docker",
|
||||
"position": 1
|
||||
}
|
139
docs/ops/k8s&docker/docker容器初窥.md
Normal file
139
docs/ops/k8s&docker/docker容器初窥.md
Normal file
@ -0,0 +1,139 @@
|
||||
---
|
||||
title: docker容器初窥
|
||||
---
|
||||
|
||||
> 了解一下,了解一下- -!
|
||||
> [官网](https://www.docker.com/) [英文文档](https://docs.docker.com/install/overview/) [中文文档](https://yeasy.gitbooks.io/docker_practice/)
|
||||
|
||||
## 安装
|
||||
|
||||
> 我吧我原来那台腾讯云 windows 的服务器换成了 centos 来尝试
|
||||
> [参考教程](https://yeasy.gitbooks.io/docker_practice/install/centos.html)
|
||||
|
||||
```shell
|
||||
# 安装docker-ce
|
||||
## 依赖
|
||||
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
|
||||
## 切换国内源
|
||||
sudo yum-config-manager --add-repo https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
|
||||
## 安装
|
||||
sudo yum makecache fast
|
||||
sudo yum install docker-ce -y
|
||||
## 开机启动和开启docker
|
||||
sudo systemctl enable docker
|
||||
sudo systemctl start docker
|
||||
```
|
||||
|
||||
执行完上面的步骤安装就算完成了,执行一次`docker run hello-world`没有提示错误就是成功了
|
||||
|
||||
## 镜像
|
||||
|
||||
> 这获取镜像感觉和 git 的命令有些相似,我先注册了一个账号,以后再看怎么使用
|
||||
> [镜像仓库](https://hub.docker.com/explore/)
|
||||
|
||||
### pull
|
||||
|
||||
使用 pull 获取镜像,我们可以在镜像仓库中找一个我们喜欢的镜像,然后拉去下来,之后运行
|
||||
|
||||
```shell
|
||||
# 命令格式
|
||||
docker pull [选项] [Docker Registry 地址[:端口号]/]仓库名[:标签]
|
||||
# 这里我弄一个redis
|
||||
docker pull redis
|
||||
```
|
||||
|
||||
### 开启一个 redis 服务器
|
||||
|
||||
--name 是为这个容器命名,不然之后我们就只能用 UUID 来找了
|
||||
-d 是以守护态运行,也就是后台运行,不然会直接的打印到我们终端上
|
||||
我们可以用
|
||||
docker logs test-redis 看运行日志
|
||||
docker container ls 查看容器信息
|
||||
docker attach test-redis 重新进入容器
|
||||
docker container rm test-redis 删除容器
|
||||
|
||||
```shell
|
||||
docker run --name test-redis -d redis
|
||||
```
|
||||
|
||||
### 使用 cli 连接 redis
|
||||
|
||||
使用下面这个命令创建一个 redis 的容器 运行 redis-cli 这个命令
|
||||
-i 使用交互式的操作
|
||||
-t 打开一个终端
|
||||
--rm 退出之后就删除这个容器
|
||||
后面的-h 和-p 是主机(redis 就是主机名)和端口
|
||||
|
||||
```shell
|
||||
docker run -it --rm redis redis-cli -h test-redis -p 6379
|
||||
```
|
||||
|
||||
不过上面这个命令是不足够的 - -。。。运行之后并没有链接上我们之前创建的 redis 服务器,还需要加上一个 --link 的参数,使两个容器建立链接,然后我们就可以使用 redis 客户端了
|
||||
|
||||
```shell
|
||||
docker run -it --link test-redis:redis --rm redis redis-cli -h test-redis
|
||||
```
|
||||
|
||||
### 外部使用容器
|
||||
|
||||
我先给我的服务器装一个 redis-cli,等会儿好测试
|
||||
|
||||
```shell
|
||||
yum install redis -y
|
||||
```
|
||||
|
||||
在容器没有创建前,我们可以用`-p`来映射端口
|
||||
|
||||
```shell
|
||||
# -P 随机分配一个49000~49900的端口
|
||||
# 可以用docker container ls来查看
|
||||
# -p可以指定分配,例如:
|
||||
# -p 6379:6379 (映射所有地址到6379) -p 127.0.0.1:6300:6379 (映射到127.0.0.1上的6300端口)
|
||||
# -p 127.0.0.1::6379(映射所有端口到ip上) -p 1813:1813/udp(指定udp端口)
|
||||
# 之后可以使用docker port test-redis 查看映射情况
|
||||
docker run --name test-redis -d -P redis
|
||||
```
|
||||
|
||||
容器创建完成之后,我们可以用 iptables 来操作,不过这是很不好的,只是提一下可以使用这个方法
|
||||
|
||||
```shell
|
||||
# 获取ip地址,我们也可以直接的用这个ip来连接
|
||||
docker inspect test-redis | grep IPAddress
|
||||
# iptables映射端口
|
||||
iptables -t nat -A DOCKER -p tcp --dport 6379 -j DNAT --to-destination 172.17.0.2:6379
|
||||
```
|
||||
|
||||
推荐下面这个方法:
|
||||
使用 commit 创建镜像,然后重新运行
|
||||
|
||||
```shell
|
||||
# 创建了个my-redis的镜像
|
||||
docker commit test-redis my-redis
|
||||
# 我吧原来的停止删除,重新创建,这回用-p参数
|
||||
docker stop test-redis
|
||||
docker container rm test-redis
|
||||
docker run --name test-redis -d -p 6379:6379 redis
|
||||
```
|
||||
|
||||
完成,之后我们可以使用`redis-cli`直接访问了
|
||||
|
||||
```shell
|
||||
[root@VM_92_235_centos ~]# redis-cli
|
||||
127.0.0.1:6379> set haha qwe123
|
||||
OK
|
||||
127.0.0.1:6379> get haha
|
||||
"qwe123"
|
||||
127.0.0.1:6379> exit
|
||||
[root@VM_92_235_centos ~]# docker run -it --link test-redis:redis --rm redis redis-cli -h test-redis
|
||||
test-redis:6379> get haha
|
||||
"qwe123"
|
||||
test-redis:6379> exit
|
||||
```
|
||||
|
||||
上面是我玩的,感觉还不错吧
|
||||
|
||||
## End
|
||||
|
||||
越用到后面越觉得容器的强大,最开始我想感觉有些占空间,又没什么用,用不到,所以用的云服务器学习,现在我想在我的电脑上装一个玩了。
|
||||
|
||||
还有很多内容,这一篇文章只是记录一些基本的操作,还有一个**Dockerfile**和 Makefile 类似,可以用来定制我们需要的镜像,这也是一个很重要的内容,后面再继续研究。
|
Reference in New Issue
Block a user