docker的基本使用
官网地址: docs.docker.com/desktop/
1.前提
需要 CentOS 7 或 8 的维护版本
**centos-extras**库必须启用
安装
- 首先我们需要卸载旧版本,防止重复安装
sudo yum remove docker
docker-client
docker-client-latest
docker-common
docker-latest
docker-latest-logrotate
docker-logrotate
docker-engine
如果系统没有装yum,先安装yum工具
sudo yum install -y yum-utils
- 设置国内阿里云存储库,加快下载速度
sudo yum-config-manager
--add-repo
mirrors.aliyun.com/docker-ce/l…
- 查看docker版本列表,下载自己需要的docker版本
yum list docker-ce --showduplicates|sort -r
- 查看之后,安装需要的Docker版本
yum -y install docker-ce-23.0.3-1.el7
- 查看docker版本,检查是否安装完成
docker version
- 启动docker服务
systemctl start docker
其他常用命令
systemctl stop docker 停止 docker 服务
systemctl status docker 查看 docker 服务状态
systemctl restart docker 重启 docker 服务
systemctl enable docker 设置开机启动
执行一下命令,可以删除卸载docker
#卸载Docker引擎
sudo yum remove docker-ce docker-ce-cli containerd.io
#清除所有数据 删除所有镜像、容器和卷
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
docker镜像
镜像下载地址,找到自己所需要的镜像,比如mysql,redis等
找到自己想要的版本
- 也可以搜索镜像(看有哪些版本)
docker search nginx
- 拉取镜像(如何没有版本号,拉去最新的镜像)
docker pull nginx (版本号) docker pull mysql
docker pull openjdk
- 如果拉取最新的镜像,想查看镜像的版本
docker image inspect mysql:latest|grep -i version
- 查看镜像列表
docker images
列表界面字段说明
REPOSITORY:镜像属于的仓库
TAG:镜像的标签信息,标记同一个仓库中的不同镜像;
IMAGE ID:镜像的唯一ID 号,唯一标识一个镜像;
CREATED:镜像创建时间;
VIRTUAL SIZE:镜像大小
- 删除镜像
docker rmi 仓库名称:标签
docker rmi 镜像ID号
- 切换阿里云镜像源可以让加快镜像拉取速度
touch /etc/docker/daemon.json
vi /etc/docker/daemon.json
写入如下内容
{
"registry-mirrors": ["https://mr63yffu.mirror.aliyuncs.com"]
}
刷新系统
systemctl daemon-reload
7.docker外放端口配置(用于外部连接,如果不需要可以忽略) i 编辑配置文件
vi /etc/systemd/system/multi-user.target.wants/docker.service
2.修改文件
i 进入编辑模式,把下面的内容加入到文件中
-H tcp://0.0.0.0:1212 -H unix://var/run/docker.sock
esc之后保存:wq
3.配置安全组防火墙1212之后重启docker
重载
systemctl daemon-reload
重启
systemctl restart docker
查看端口是否开启
netstat -ntlp
4.连接
tcp://47.97.66.70:1212
安装mysql
#拉取镜像
docker pull mysql:8.0.32-oracle
#启动mysql
sudo docker run -d --name=mysql -e MYSQL_ROOT_PASSWORD=root -p3306:3306 mysql:8.0.32-oracle
安装Redis
docker run --restart=always --log-opt max-size=100m --log-opt max-file=2 -p 6379:6379 --name myredis -v /opt/myredis/redis.conf:/etc/redis/redis.conf -v /opt/myredis/data:/data -d redis:7.0.4 redis-server /etc/redis/redis.conf --appendonly yes --requirepass root
安装rabbitMQ
- 拉取镜像
docker pull rabbitmq
- 启动
docker run -d --hostname my-rabbit --name rabbit -p 15672:15672 -p 5672:5672 rabbitmq
- 开启管理界面插件
进入rabbitmq内部
docker exec -it 容器id /bin/bash
启动rabbitmq界面插件
rabbitmq-plugins enable rabbitmq_management
访问
http://localhost-ip:15672
账号密码
guest
guest
退出容器
exit
安装nginx
#拉取官方nginx镜像
docker pull nginx
docker run -di --name nginx -p 80:80 nginx
#创建Nginx容器,并将容器中的/etc/nginx目录和宿主机的/home/local/nginx/conf目录进行挂载
#将容器内的配置文件拷贝到指定目录
# 创建目录
mkdir -p /home/ruoyi/nginx
# 将容器内的配置文件拷贝到指定目录
docker cp nginx:/etc/nginx /home/local/nginx/conf
docker的一些开源镜像应用,可以直接使用
DockerFile的使用
常用命令说明
1.FROM
指定基础镜像
FROM nginx
- RUN
在容器执行的命令(可以安装一些容器中没有的东西,比如字体,一些curl工具等等)
RUN apk add --update ttf-dejavu fontconfig
- VOLUME
挂载在宿主机的目录
VOLUME /local/project
- WORKDIR
指定工作起始目录
WORKDIR /home/nsjz
- COPY
复制文件到容器中(左边是系统,右边是容器)
COPY./docker/tianzhi/modules/system/jar/tianzhi-modules-system.jar /home/tianzhi/tianzhi-modules-system.jar
- *ENTRYPOINT
容器启动的时候要干什么 (一般是启动应用程序,比如jar)
ENTRYPOINT ["java","-jar","tianzhi-modules-system.jar"]
- EXPOSE
指定对外的端口
EXPOSE 8080
- MAINTAINER 维护者
MAINTAINER tianzhi
说明已经完毕,下面我们来制作镜像容器
首先
mkdir /opt/docker-images/web-docker
cd /opt/docker-images/web-docker
创建Dockerfile
vim Dockerfile
node环境项目的编写
node环境
FROM node:16.15.0
RUN git clone https://gitee.com/mirschao/webserver-vue.git
COPY ./ ./app
WORKDIR /app
WORKDIR webserver-vue
RUN npm install
EXPOSE 8080
CMD ["npm","run","serve"]
编写完成后进行构建
docker build -t tianzhi-web:v1.0 .
webserve:名字
v1.0:版本
. 构造 当前目录的Dockerfile
查看镜像
docker image ls
运行镜像
docker run -itd —-name tianzhijava -p 8090:8080 tianzhi:v1.0
查看镜像的运行状态
docker ps -a
nginx的多阶段构造(先npm打包,在把它放进nginx中运行)
FROM node:16.15.0
COPY ./ ./app
WORKDIR /app
RUN npm install && npm run build
FROM nginx:1.21
RUN mkdir /app
COPY --from=0 /app/dist/app
COPY nginx.conf /etc/nginx/nginx.conf
编写完成后进行构建
docker build -t web-project:v1.0 .
docker -itd -name web-project -p 80:80 tianzhi-web:v1.0
后端的编写
Python
FROM python:alpine3.15
COPY ../webserverbacken
WORKDIR webserverbackend
RUN pip install -i https://mirrors.ustc.edu.cn/pypi/web/simple -r requirements.txt
EXPOSE 8000
CMD ["python","manager.py","runserver","0.0.0.0:8080"]
编写完成后进行构建
docker build -t tianzhijava:v1.0 .
运行
docker run -itd —name ``tianzhijava``-p 8090:8080 ``tianzhijava``:v1.0
Docker-Compose
Docker-Compose是一个用来定义和运行多个复杂应用的Docker编排工具。比如,多个微服务项目,通常由多个容器应用组成。一个个手动启动?假如有上百个微服务呢,显然不现实,那么就需要使用Docker Compose编排工具来批量启动容器
安装docker-compose,下载docker-compose文件
curl -L https://github.com/docker/compose/releases/download/1.21.1/docker-compose-uname -s-uname -m-o /usr/local/bin/docker-compose
将文件复制到/usr/local/bin环境变量下面
mv docker-compose /usr/local/bin
给他一个执行权限
chmod +x /usr/local/bin/docker-compose
查看是否安装成功
docker-compose -version
使用docker-compose进行编排
1.创建docker-compose目录,再创建一个docker-compose.yml
mkdir usr/local/docker-compose
cd usr/local/docker-compose vi docker-compose.yml
编写docker-compose.yml文件
version: "3"
services:
redis:
image: redis:alpine
ports:
- "6379"
networks:
- frontend
deploy:
replicas: 2
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
db:
image: postgres:9.4
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
deploy:
placement:
constraints: [node.role == manager]
vote:
image: dockersamples/examplevotingapp_vote:before
ports:
- 5000:80
networks:
- frontend
depends_on:
- redis
deploy:
replicas: 2
update_config:
parallelism: 2
restart_policy:
condition: on-failure
result:
image: dockersamples/examplevotingapp_result:before
ports:
- 5001:80
networks:
- backend
depends_on:
- db
deploy:
replicas: 1
update_config:
parallelism: 2
delay: 10s
restart_policy:
condition: on-failure
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 1
labels: [APP=VOTING]
restart_policy:
condition: on-failure
delay: 10s
max_attempts: 3
window: 120s
placement:
constraints: [node.role == manager]
visualizer:
image: dockersamples/visualizer:stable
ports:
- "8080:8080"
stop_grace_period: 1m30s
volumes:
- "/var/run/docker.sock:/var/run/docker.sock"
deploy:
placement:
constraints: [node.role == manager]
networks:
frontend:
backend:
volumes:
db-data:
启动docker-compose文件,这样我们就可以一下子启动中间件及多个服务
docker-compose -f docker-compose.yaml up -d
-f调用文件。
-d:开启守护进程
docker-compose常用命令
| 命令 | 说明 |
|---|---|
| build | 重新构建服务 |
| ps | 列出容器 |
| up | 创建和启动容器 |
| exec | 在容器里面执行命令 |
| scale | 指定一个服务容器启动数量 |
| top | 显示正在运行的容器进程 |
| logs | 查看服务容器的输出 |
| down | 删除容器、网络、数据卷和镜像 |
| stop/start/restart | 停止/启动/重启服务 |
| 注意:必须要在含有docker-compose.yml文件的目录中才可以使用 |
详细的编排语法请自行查阅学习,这里就不一一解释说明了