docker安装
在这里就跳过了
容器的基本命令
下载一个centos镜像
docker pull centos
启动容器
docker run [可选] image
--name=" name" 容器名字 用来区分容器
-d 后台方式运行
-it 使用交互运行 进入容器查看内容
-p 使用容器的端口 -p 8080::8080
-p 主机端口:容器短空
-p 容器端口
-P 随机指定端口
查看镜像
docker images
当前运行的容器
docker ps
docker ps -a 当前以及历史运行过的容器-n=? 显示最近的一个容器
-q 只显示容器的编号
删除容器
docker rm 容器id
docker rm -f $(docker ps -aq) 删除所有的容器
退出容器
exit 退出停止容器
ctrl + P + q 容器不停止退了
启动和停止容器的操作
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前的容器
docker kill 容器id 强制停止当前的容器
docker container prune -f 清空所有不使用的容器
后台启动容器
docker run -d centos
# 问题docker ps 发现centos 停止了,
# 常见的坑, docker 容器使用后台运行, 就必须要有一个前台进行吗docker发现没有应用, 就会自动停止
查看日志#
#docker logs
docker logs -f -t --tail 容器
-tf 显示日志
--tal number 显示日志条数
查看容器中的进程信息 ps
docker top 容器id
查看容器信息
docker inspect 容器id
进入到当前容器
方式1
docker exec -it 容器id /bin/bash
方式2
docker attach 容器id
docker attach 容器id两个不同
’docker exec 进入到容器后开启一个新的终端,可以在里面操作docker attach 进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id: 容器内的路径 目的的主机路径
从主机拷贝文件到容器里面
安装nacos
拉去
docker run -d -p 8848:8848 --env MODE=standalone --env PREFER_HOST_MODE=hostname -v /mydata/nacos/init.d:/home/nacos/init.d -v /mydata/nacos/logs:/home/nacos/logs --name nacos -e JVM_XMS=256m -e JVM_XMX=256m -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=ip -e MYSQL_SERVICE_PORT=3306 -e MYSQL_SERVICE_DB_NAME=dbname -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=pass nacos/nacos-server
直接安装不连接数据库
docker run \
--name nacos -d \
-p 8848:8848 \
--privileged=true \
--restart=always \
-e JVM_XMS=256m \
-e JVM_XMX=256m \
-e MODE=standalone \
-e PREFER_HOST_MODE=hostname \
nacos/nacos-server:1.3.1
安装redis
docker run --restart=always -p 6379:6379 --name myredis -d redis:7.0.12 --requirepass ningzaichun
安装portainer
docker run -d -p 9000:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --name portainer portainer/portainer-ce
安装mysql (个人使用)
# 拉取镜像
docker pull mysql
# 启动
docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
docker run -d -p 3306:3306 --privileged=true -v /usr/local/mysql/log:/var/log/mysql -v /usr/local/mysql/data:/var/lib/mysql -v /usr/local/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql
dockerFile 文件
dockerfile 是用来构建的docker镜像的文件,
构建步骤
1. 编写有个dockerfile 文件
2. docker build 构建成为一个镜像
3. docker run 运行镜像
4. docker push s发布镜像 dockerhub 阿里云镜像
执行命令
docker build -f dockerfilePath -t 镜像名字[: 版本号]
-f 代表 dockerfile 的文件路径
dockerfilePath 文件路径
-t 代表镜像名字以及版本号
基础知识
1. 保留关键字(指令) 必须都是大写字母
2. 执行从上到下顺序执行
3. # 表示注释
4. 每一个指令都会创建提交一个新的镜像层
dockerfile 构建文件。定义了一切的步骤
dockerImages 通过dockerFIle构建生成的镜像,最终发布和运行的产品
docker 容器 : 容器就是镜像运行起来提供服务器
FROM 基础镜像,一切从这里开始构建
ENV 构建的时候设置环境变量!
RUN 镜像构建的时候需要运行的命令
COPY 类似ADD,将我们文件拷贝到镜像中
WORKDIR 镜像的工作目录
FROM #基础镜像,一切从这里开始构建
MAINTAINER #镜像是谁写的,姓名+邮箱
RUN #镜像构建时需要运行的命令
ADD #步骤,tomcat镜像,这个tomcat压缩包;添加内容
WORKDIR #镜像工作目录
VOLUME #挂载的目录
EXPOSE #暴露端口配置
CMD #指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD #当构建一个被继承DockerFile 这个时候就会运行 ONBUILD 的指令,触发指令
COPY #类似ADD,将我们的文件拷贝至镜像中
ENV #构建的时候设置环境变量
自定义dockerfile
nginx
FROM nginx # 依赖那个包
RUN mkdir workspace # 穿件文件
WORKDIR /workspace # 设置工作区域
COPY ./dist /workspace/dist # 复制 文件到dist下
COPY ./docker-compose/default.conf /etc/nginx/conf.d # 复制nginx配置
EXPOSE 80 # 暴露的端口
修改容器镜像源
echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories
FROM nginx # 依赖那个包
RUN mkdir workspace # 穿件文件RUN echo -e 'https://mirrors.aliyun.com/alpine/v3.6/main/\nhttps://mirrors.aliyun.com/alpine/v3.6/community/' > /etc/apk/repositories
RUN apt-get update
RUN apt-get install vim # 安装vim
WORKDIR /workspace # 设置工作区域
COPY ./dist /workspace/dist # 复制 文件到dist下
COPY ./docker-compose/default.conf /etc/nginx/conf.d # 复制nginx配置
EXPOSE 80
项目实践
前端pc 部署
DockerFile
FROM nginx
RUN mkdir /workspace
WORKDIR /workspace
COPY ./dist /workspace/dist
COPY ./front.conf /etc/nginx/conf.d
EXPOSE 80
front.conf
server {
listen 80;
server_name localhost;
location / {
root /workspace/dist;
index index.html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
dist为前端项目自备
node部署
DockerFile
FROM node:17
WORKDIR /workspace/dist
COPY ./dist /workspace/dist
RUN yarn config set registry https://registry.npm.taobao.org \
&& npm config set registry https://registry.npm.taobao.org \
&& yarn global add pm2 \
&& yarn
EXPOSE 80
CMD [ "yarn", "start" ]
dist为nodejs项目自备
docker-compose
基本认识
Docker-compose将所管理的容器分为三层,分别是工程(project),服务(service)以及容器(container)1。
yml文件部分解释
version 版本号
servcies 配置服务
nginx-front: 服务名称
build 在构建时应用的配置项。一般直接指定Dockerfile所在文件夹路径,可以是绝对路径,或者相对于Compose配置文件的路径。可以指定为包含构建上下文(context)路径的字符串。
build / content context指定上下文路径,使用dockerfile基于上下文路径指定Dockerfile文件,使用args指定构建参数
build / dockerfile 指定Dockerfile文件。Compose会使用指定的Dockerfile文件构建镜像,但必须要指定构建上下文路径
container_name 指定自定义容器的名称
deploy 配置项中包含endpoint_mode、labels、mode、placement、replicas、resources、restart_policy、update_config等子配置项
deploy / resources 配置资源限制 , 例如cpu 内存使用
deploy / resources / limits 用于限制该服务可以使用CPU和内存的上限:
deploy / resources / limits / cups 表示该服务可以使用的CPU上限为多少个CPU核心。
deploy / resources / limits / memory 表示该服务可以使用的内存上限为多少M。
deploy / resources / reservations用于预留该服务可以使用CPU和内存的下限:
deploy / resources / limits / cups 表示该服务至少可以使用多少个CPU核心。
deploy / resources / limits / memory 表示该服务至少可以使用多少M的内存。
hostname 设置容器的主机名
volumes:定义了两个卷的挂载
ports
:将容器的8087端口映射到主机的端口。
注意:
同时指定了build和image Compose会在./dir目录下构建一个名为webapp,标签为tag的镜像。
version: '2'
services:
nginx-front:
platform: linux/amd64
container_name: hospital-front
image: nginx-front:tag
container_name: my-container
build:
context: .
dockerfile: Dockerfile
ports:
- 8020:81
hostname: front-system-service
deploy:
resources:
limits:
cpus: '0.50'
memory: 50M
reservations:
cpus: '0.25'
memory: 20M
如果docker-compose文件是docker-compose.yml 使用下面这个启动
docker-compose up -d
如果docker-compose文件不是docker-compose.yml 使用下面这个启动
docker-compose -f docker-compose-test.yml up -d --build