docker和k8s 使用
实例BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 、ping、ifconfig 等)的精简工具箱—rm 指令可以让我们在退出容器时自动销毁该容器,这样便于测试docker run --name box1 -it --rm busybox shdocker 分别搭建es和面板管理https://segmentfault.
实例
BusyBox 是一个集成了一百多个最常用 Linux 命令和工具(如 cat、echo、grep、mount、telnet 、ping、ifconfig 等)的精简工具箱 —rm 指令可以让我们在退出容器时自动销毁该容器,这样便于测试
docker run --name box1 -it --rm busybox sh
docker 分别搭建es和面板管理
docker-compose搭建es集群
kubernetes使用
kubectl create -f test.yaml 创建pod
kubectl get pods 可以查询当前的pod列表
kubectl get po --show-labels 查询所有Pod,并显示标签
kubectl label po kubia-manual creation_method=manual 修改Pod标签
kubectl label po kubia-manual-v2 env=debug --overwrite 没有指定标签,可以进行添加,同时也可以修改
kubectl logs kubia-manual -c kubia 查看应用日志
kubectl get po kubia-manual -o yaml 查询Pod描述文件
kubectl delete po --all 删除所有Pod
kubectl port-forward kubia-manual 8888:8080 转发Pod
Pod筛选
kubectl get po -l creation_method=manual
kubectl get po -l creation_method=manual,env=debug
使用标签和选择器来约束pod调度
kubectl get nodes
kubectl label node minikube gpu=true
kubectl get nodes -l gpu=true
Pod注解
kubectl annotate pod kubia-manual mycompany.com/someannotation="foo bar" pod/kubia-manual annotated
查找命名空间
kubectl get ns
kubectl get po --namespace default
停止和移除pod
kubectl delete po kubia-gpu
kubectl delete po -l creation_method=manual 使用标签选择器删除pod
kubectl delete ns custom-namespace 通过删除整个命名空间来删除pod
kubectl delete po --all 删除所有Pod
kubectl delete all --all
安装python
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
安装python3
yum install python3
安装pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python3 get-pip.py
docker容器常用命令
docker for mac 安装kubernetes https://github.com/AliyunContainerService/k8s-for-docker-desktop
docker阿里云加速器 https://help.aliyun.com/document_detail/60750.html?spm=a2c4g.11186623.6.549.53594685cbQcAy
一键安装docker 脚本
curl -sSL https://get.daocloud.io/docker | sh
暂停容器
docker stop
开启容器
docker start
查看开启的容器
docke ps
查看所有的容器
docker ps -a
查看最后一次启动的容器
docker ps -l
docker run -p 80:80 --name webserve -ti -d ubuntu /bin/bash 大写 -P 可以将容器内的端口随机映射到主机 可添加 --network smallsha-net 容器互通
进入容器进行操作
docker exec -ti webserve /bin/bash
查看容器的映射端口
docker port 容器ID
容器ID 查看容器的日志
docker logs -f
查看容器内的进程
docker top 容器ID
查看容器的配置和环境 经常用
docker inspect 容器Id
docker rm 容器ID 移除容器 但是容器必须是stop状态 docker rm -f 容器ID
docker commit -m="提交的描述" -a="是谁提交的" 容器ID 镜像副本名称 将当前配置好的容器打包成镜像
docker镜像常用命令
docker pull 镜像
docker run 镜像
docker rmi 删除镜像
给容器构建镜像标签
docker tag 容器ID smallsha/centos:dev
docker 容器互联
docker network ls 查看docker网络
docker network create -d bridge smallsha-net 创建dcoker 网络 bridge 桥接 overlay 网络
docker 登录docker hub
docker login
docker tag 镜像 smallsha/镜像
到自己的dockerhub
docker push smalsha/镜像
暂停所有容器
docker stop $(docker ps -q)
删除所有容器
docker rm -f $(docker ps -aq)
删除所有镜像
docker rmi $(docker images -q)
搭建kong
1 docker network create kong-net 创建单独的网络环境
2 docker run -d --name kong-database \
--network=kong-net \
-p 5432:5432 \
-e "POSTGRES_USER=kong" \
-e "POSTGRES_DB=kong" \
-e "POSTGRES_HOST_AUTH_METHOD=trust" \
postgres:9.6 创建数据库
3 docker run --rm \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
kong:latest kong migrations bootstrap 使用临时Kong容器运行迁移
4 docker run -d --name kong \
--network=kong-net \
-e "KONG_DATABASE=postgres" \
-e "KONG_PG_HOST=kong-database" \
-e "KONG_CASSANDRA_CONTACT_POINTS=kong-database" \
-e "KONG_PROXY_ACCESS_LOG=/dev/stdout" \
-e "KONG_ADMIN_ACCESS_LOG=/dev/stdout" \
-e "KONG_PROXY_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_ERROR_LOG=/dev/stderr" \
-e "KONG_ADMIN_LISTEN=0.0.0.0:8001, 0.0.0.0:8444 ssl" \
-p 8000:8000 \
-p 8443:8443 \
-p 8001:8001 \
-p 8444:8444 \
kong:latest 启动Kong
5 curl -i http://localhost:8001/ 测试kong 是否正常
6 docker pull pantsel/konga
docker run -p 1337:1337 --network kong-net --name konga -e "NODE_ENV=production" pantsel/konga 搭建konga面板
dockerfile 使用
创建dockerfile 文件
touch Dockerfile
例子
FROM centos
RUN yum install wget
RUN wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz"
RUN tar -xvf redis.tar.gz
以上执行会创建 3 层镜像。可简化为以下格式:
FROM centos
RUN yum install wget \
&& wget -O redis.tar.gz "http://download.redis.io/releases/redis-5.0.3.tar.gz" \
&& tar -xvf redis.tar.gz
FROM elasticsearch:7.12.0
ENV VERSION=7.12.0
RUN cd /usr/share/elasticsearch/config/ \
&& echo "http.cors.enabled: true" >> elasticsearch.yml \
&& echo 'http.cors.allow-origin: "*"' >> elasticsearch.yml \
&& cd ../plugins/
RUN /bin/bash -c '/bin/echo -e "y" | elasticsearch-plugin install https://github.com/medcl/elasticsearch-analysis-ik/releases/download/v${VERSION}/elasticsearch-analysis-ik-${VERSION}.zip'
EXPOSE 9200
EXPOSE 9300
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP app.py
ENV FLASK_RUN_HOST 0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run"]
使用 dockerfile 构建images
docker build -t smallsha/centos:v1 .
使用&&链接多个命令的时候组合执行 构建出来的包更小 基于镜像
FROM nginx
执行命令
RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
exec 格式:
RUN ["./test.php", "dev", "offline"] 等价于 RUN ./test.php dev
COPY本机的内容到宿机里面
容器内的指定路径,该路径不用事先建好,路径不存在的话,会自动创建
COPY hom* /mydir/
COPY hom?.txt /mydir/
ADD本机的文件到宿机里面
ADD 指令和 COPY 的使用格式一致(同样需求下,官方推荐使用 COPY),ADD传输文件到宿机文件格式是tar,会自动复制并且解压到宿机,缺点就是会在构建镜像的时候会变的很慢。
CMD是docker run 的时候执行的,RUN是docker build 执行的
CMD ["<可执行文件或命令>"," "," ",...]
ENTRYPOINT 果运行 docker run 时使用了 --entrypoint 选项,将覆盖 CMD 指令指定的程序
docker run nginx:test -c /etc/nginx/new.conf
FROM nginx
ENTRYPOINT ["nginx", "-c"] # 定参
CMD ["/etc/nginx/nginx.conf"] # 变参
ENV定义
ENV NODE_VERSION 7.2.0 使用 $ENV
ARG 和 ENV一样 当时只对dockerfile 构建的时候有效。构建好的镜像里面是不会包含的
VOLUME 1、没有指定VOLUME也没有指定-v,这种是普通文件夹。
2、指定了VOLUME没有指定-v,这种文件夹可以在不同容器之间共享,但是无法在本地修改。
3、指定了-v的文件夹,这种文件夹可以在不同容器之间共享,且可以在本地修改。
VOLUME ["<路径1>", "<路径2>"...]
EXPOSE声明容器里面的端口,docker run -P 执行容器的时候 会随机映射到容器里面的端口
WORKDIR 指定的工作目录
USER 用于指定执行后续命令的用户和用户组,
HEALTHCHECK 用于指定某个程序或者指令来监控 docker 容器服务的运行状态。
ONBUILD 用于延迟构建命令的执行
docker-compose 使用
安装
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
docker-compose --version
创建docker-compose.yml 文件
touch docker-compose.yml
例子
# yaml 配置
version: '3.7' #指定本 yml 依从的 compose 哪个版本制定的。
services:
web:
build: . #指定为构建镜像上下文路径:
ports:
- "5000:5000"
redis:
image: "redis:alpine"
version: "3.7"
services:
webapp:
build:
context: ./dir #上下文路径
dockerfile: Dockerfile-alternate #指定构建镜像的 Dockerfile
文件名。
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
links:
- db
args:
buildno: 1 #添加构建参数,这是只能在构建过程中访问的环境变量
labels: #设置构建镜像的标签
- "com.example.description=Accounting webapp"
- "com.example.department=Finance"
- "com.example.label-with-empty-value"
target: prod #多层构建,可以指定构建哪一层。
version: '2' 'compose版本号'
services: '服务标识符'
web: '子服务名'
image: dockercloud/hello-world '服务依赖镜像属性'
ports: '服务端口属性'
- 8080
networks: '网络服务属性'
- front-tier
- back-tier
redis:
image: redis
links: '容器间的连接设置'
- web
networks:
- back-tier
lb:
image: dockercloud/haproxy
ports:
- 80:80
links:
- web
networks:
- front-tier
- back-tier
volumes: '挂载一个目录或者一个已存在的数据卷容器'
- /var/run/docker.sock:/var/run/docker.sock
networks:
front-tier:
driver: bridge
back-tier:
driver: bridge
version: "2.2"
services:
elasticsearch:
image: elasticsearch:7.4.2
restart: always
ports:
- "9200:9200"
- "9300:9300"
networks:
- elastic
environment:
- "discovery.type=single-node"
kibana:
image: kibana:7.4.2
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- elastic
networks:
elastic:
driver: bridge
启动应用
docker-compose up
启动容器并且后台运行
docker-compose up -d
docker-compose restart(重启) pause(暂停) unpause(恢复) rm(删除容器) stop(暂停容器) start(开启容器) build(构建) ps(显示)
进入到容器中
docker-compose exec nginx bash
查看日志 -f 参数实时查看日志
docker-compose logs nginx
验证docker-compose文件是否正确
docker-compose config -q
cap_add,cap_drop添加或删除容器拥有的宿主机的内核功能。
cap_add:
- ALL # 开启全部权限
cap_drop:
- SYS_PTRACE # 关闭 ptrace权限
cgroup_parent
cgroup_parent: m-executor-abcd # 为容器指定父 cgroup 组,意味着将继承该组的资源限制。
command 覆盖容器启动的默认命令
command: ["bundle", "exec", "thin", "-p", "3000"]
container_name 指定生成容器的名称
depends_on
version: "3.7"
services:
web:
build: .
depends_on: #以依赖性顺序启动服务。在以下示例中,先启动 db 和 redis ,才会启动 web。
- db
- redis
redis:
image: redis
db:
image: postgres
deploy指定与服务的部署和运行有关的配置。
dockerhub 账号 smallsha smallsha666..
docker-compose 编排
docker 手册
http://wiki.jikexueyuan.com/project/docker-technology-and-combat/usage.html 上传镜到docker hub https://www.cnblogs.com/wherein/p/6862911.html
环境配置(博客)(特别好php 学习文章)
https://blog.csdn.net/relax_hb/article/details/69668815 docker 介绍
https://blog.csdn.net/jiang_xinxing/article/details/58025417 博客技术 docker使用
https://download.docker.com/mac/stable/Docker.dmg docker 下载链接
https://www.cnblogs.com/LO-gin/p/6958720.html php环境搭建 详细说明了每一个命令的参数
https://www.cnblogs.com/qinyujie/p/8532515.html docker 安装lnmp 环境 (实际操作安装成功)
https://blog.csdn.net/cmzsteven/article/details/49230363 删除容器 解决冲突
https://blog.csdn.net/qq_35981283/article/details/69648171 安装rabbitmq
https://blog.csdn.net/lkxlaz/article/details/54580735 brew 安装mysql 数据库密码: SMALLsha@123
https://blog.csdn.net/weixin_40221833/article/details/79664667 docker 安装swoole
管理数据库软件连接不上,输入以下命令v
ALTER USER root@localhost IDENTIFIED WITH mysql_native_password BY 'SMALLsha@123';
容器与主机之间mount 不上 就新开个container进行挂载,然后在返回要用的容器(现在主机上创建文件夹)
查看php.ini 位置
/usr/local/php/bin/php --ini
此处贴一份nginx 配置 php
location ~ \.php(.*)$ {
root /var/www/html/;
fastcgi_pass 172.17.0.3:9000;
fastcgi_index index.php;
fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
include fastcgi_params;
}
更多推荐
所有评论(0)