docker部署开发环境的笔记一

本文详细介绍了Docker常用命令,包括如何进入和退出容器,`docker run`命令的各种选项,以及通过实例展示了如何部署Redis、Rabbitmq、Minio、MySQL和Nacos。还提到了在安装Rabbitmq时遇到的问题及其解决方法,以及Linux系统中的防火墙和`netstat`命令的使用。

一、docker常用语句

1.进入docker容器

docker ps -a #查看所有在运行的容器
docker exec -it 775c7c9ee1e1 /bin/bash  #775c7c9ee1e1为容器ID

2.从docker容器中退出

img

对于直接使用exit和快捷 方式(Ctrl+D)退出的容器,如果还想重新启动,需要使用命令 docker start 容器id或容器名称

3.docker run命令

docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

OPTIONS说明:

  • -a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项;
  • -d: 后台运行容器,并返回容器ID;
  • -i: 以交互模式运行容器,通常与 -t 同时使用;
  • -P: 随机端口映射,容器内部端口随机映射到主机的端口
  • -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
  • -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
  • –name=“nginx-lb”: 为容器指定一个名称;
  • –dns 8.8.8.8: 指定容器使用的DNS服务器,默认和宿主一致;
  • –dns-search example.com: 指定容器DNS搜索域名,默认和宿主一致;
  • -h “mars”: 指定容器的hostname;
  • -e username=“ritchie”: 设置环境变量;
  • –env-file=[]: 从指定文件读入环境变量;
  • –cpuset=“0-2” or --cpuset=“0,1,2”: 绑定容器到指定CPU运行;
  • **-m 😗*设置容器使用内存最大值;
  • –net=“bridge”: 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型;
  • –link=[]: 添加链接到另一个容器;
  • –expose=[]: 开放一个端口或一组端口;
  • –volume , -v: 绑定一个卷
  • –restart参数,故障处理,支持三种逻辑实现:
</pre><pre name="code" class="html">no:容器退出时不重启
 
on-failure:容器故障退出(返回值非零)时重启
 
always:容器退出时总是重启

实例:redis

docker run --name redis-server --restart=always -p 6379:6379 -v /mnt/data/docker/redis/data:/data -d redis redis-server --appendonly yes

参数说明:

​ --name redis-server 容器名redis-server

​ --restart=always 遇到故障总是重启

​ -p 6379:6379 端口映射,主机端口6379,容器端口6369

​ -v /mnt/data/docker/redis/data:/data 映射数据目录 , 宿主机文件/目录:容器里对应的文件/目录。其中,宿主机上的文件/目录是要提前存在的,容器里对应的文件/目录会自动创建。

​ -d redis redis-server 后台运行

​ --appendonly yes:开启持久化

实例:rabbit
docker run -d --name rabbitmq-server --restart=always -p 5672:5672 -p 15672:15672 -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=123456 rabbitmq:3-management

参数说明:

​ -d 后台运行

​ --name 容器名称

​ -e RABBITMQ_DEFAULT_USER=admin 设置环境变量,初始用户名:admin

​ -e RABBITMQ_DEFAULT_PASS=123456 设置环境变量, 初始密码:123456

​ 镜像名:rabbitmq 标签名为:3-management

实例:minio
docker run -d -p 9001:9001 -p 9002:9002 --restart=always --name minio-server -v /mnt/data/docker/minio/data:/data -v /mnt/data/docker/minio/config:/root/.minio -e MINIO_ROOT_USER=adminadmin -e MINIO_ROOT_PASSWORD=123456123456 minio/minio server --address :9001 --console-address :9002 /data

参数说明:

​ --name 容器名称

​ -d 后台运行*

​ -e 环境变量 MINIO_ROOT_USER 用户名 MINIO_ROOT_PASSWORD 密码(设置密码时候注意长度 否则会抛出 Access key length should be at least 3, and secret key length at least 8 characters)

​ -v 挂载持久化数据和配置文件

server作为minio子命令,而/data作为其参数,参见官方文档

​ http://docs.minio.org.cn/docs/master/minio-docker-quickstart-guide

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pmrQmyjC-1637574367292)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211122145832449.png)]

实例:mysql
docker run --name mysql-server --restart=always -v /mnt/data/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -e TZ=Asia/Shanghai -d -p 3306:3306 mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

参数说明:

​ --name 容器名

​ -v 挂载储存卷 将容器内的/var/lib/mysql目录挂载到宿主机的/mnt/data/docker/mysql/data目录 也可以自己指定路径如

​ -v /usr/app/mysql/data:/var/lib/mysql

​ -e 环境变量 MYSQL_ROOT_PASSWORD ROOT密码

​ -d 后台运行

​ -p 宿主机与容器的端口映射 主机端口:容器端口

​ --character-set-server 字符集

​ --collation-server 排序规则

实例:nacos
docker run --restart=on-failure:3 --name nacos-server -e MODE=standalone -e SPRING_DATASOURCE_PLATFORM=mysql -e MYSQL_SERVICE_HOST=mysql-server -e MYSQL_SERVICE_DB_NAME=ry-config -e MYSQL_SERVICE_USER=root -e MYSQL_SERVICE_PASSWORD=123456 -e MYSQL_SERVICE_PORT=3306 -p 8848:8848 -p 9848:9848 -p 9849:9849 -d --network=ruoyi-network nacos/nacos-server

参数说明:

​ --restart=on-failure:3 容器故障退出(返回值非零)时重启,且最大容忍3次;

​ --network=ruoyi-network 配置网络为ruoyi-network ()有服务发现及服务间相互调用问题 在Docker中我们不能使用IP地址,因为每次重新启动Docker将重新分配IP,所以我们使用容器的名称做连接地址 如mysql-server那么我们在配置之后就可以将mysql的ip换成mysql-server,在同一个network中他们是可以访问到的,也就是说我们可以新建一个network 在docker run 时候加上 --network 最后命令看起来可能是这样的 **docker run -d -p 80:80 --name=ruoyi-ui --network=ruoyi-network 我们在同一个项目中将所有服务都划分到一个network中使其能相互访问)

#创建 network

docker network create ruoyi-network

#此操作可行,nacos可用
docker run --name JCXX_nacos --network host -p 8848:8848 --restart always -e MODE=standalone -p 8848:8848 -d nacos/nacos-server:latest

4.dockerfile命令

注意文件名为Dockerfile

命令详见 https://www.cnblogs.com/dazhoushuoceshi/p/7066041.html

实例
#进入创建的 python 目录,创建 Dockerfile

#以buildpack-deps:jessie为基础镜像
FROM buildpack-deps:jessie

# 删除旧的 python
#RUN 执行后面跟着的命令行命令
#apt-get remove 会删除软件包而保留软件的配置文件
#apt-get purge 会同时清除软件包和软件的配置文件
RUN apt-get purge -y python.*

# 使用 UTF-8 编码
#ENV 设置环境变量
ENV LANG C.UTF-8

ENV PYTHON_VERSION 3.6.5

# if this is called "PIP_VERSION", pip explodes with "ValueError: invalid truth value '<VERSION>'"
ENV PYTHON_PIP_VERSION 10.0.1

#set 设置shell
#curl 从链接下载文件
#make
#用&& 符号连接命令,这样执行后,只会创建 1 层镜像;
RUN set -ex \
        && curl -fSL "https://www.python.org/ftp/python/${PYTHON_VERSION%%[a-z]*}/Python-$PYTHON_VERSION.tar.xz" -o python.tar.xz \
        && mkdir -p /usr/src/python \
        && tar -xJC /usr/src/python --strip-components=1 -f python.tar.xz \
        && rm python.tar.xz \
        \
        && cd /usr/src/python \
        && ./configure --enable-shared --enable-unicode=ucs4 \
        && make -j$(nproc) \
        && make install \
        && ldconfig \
        && pip3 install --no-cache-dir --upgrade --ignore-installed pip==$PYTHON_PIP_VERSION \
        && find /usr/local -depth \
                \( \
                    \( -type d -a -name test -o -name tests \) \
                    -o \
                    \( -type f -a -name '*.pyc' -o -name '*.pyo' \) \
                \) -exec rm -rf '{}' + \
        && rm -rf /usr/src/python ~/.cache

# make some useful symlinks that are expected to exist
RUN cd /usr/local/bin \
        && ln -s easy_install-3.5 easy_install \
        && ln -s idle3 idle \
        && ln -s pydoc3 pydoc \
        && ln -s python3 python \
        && ln -s python3-config python-config

CMD ["python3"]

在 Dockerfile 文件的存放目录下,执行构建动作。

#bulid -t  **:** 构建镜像名称:tag
#最后的 . 代表本次执行的上下文路径.不可少
docker build -t python:3.10 .

5.docker停止命令

#停止docker中容器
docker stop 容器ID
#停止docker服务
systemctl stop docker
# 重启docker
systemctl restart docker

6.docker logs命令

docker logs : 获取容器的日志

docker logs [OPTIONS] CONTAINER

OPTIONS说明:

  • -f : 跟踪日志输出
  • **–since 😗*显示某个开始时间的所有日志
  • -t : 显示时间戳
  • **–tail 😗*仅列出最新N条容器日志

7.docker 删除容器命令

#root用户删除容器
docker rm 容器名称
#非root用户删除容器
sudo docker rm 容器名称

8.docker create network命令

docker network create命令用于创建一个新的网络连接;

docker network create [OPTIONS] NETWORK

选项

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cjKNzBm3-1637574367294)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211122153259916.png)]

二、docker安装Rabbitmq时的问题

安装rabbitmq访问不了web管理页面,访问被拒绝;

首先确定服务是运行的,端口是正常监听的,防火墙也是开放了端口的

#查看容器的端口映射情况,在容器外执行
docker port 容器ID 或者 docker port 容器名称
#查找要修改容器的容器Id
#docker inspect  获取容器/镜像的元数据
docker inspect f244 |grep Id

进入到该容器中运行以下语句

rabbitmq-plugins enable rabbitmq_management

此命令会启动三个插件,然后就可以正常访问了.

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tVRjX2ld-1637574367295)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20211122141639289.png)]

三、Linux系统的常用命令

1.防火墙相关

#查看防火墙状态 
systemctl status firewalld
#开启防火墙 
systemctl start firewalld
#关闭防火墙 
systemctl stop firewalld
#开启防火墙 
service firewalld start
#禁止开机启动防火墙 
systemctl disable firewalld.service

2.netstat 命令

用于显示网络状态

#查看相应端口的服务是否启动成功
netstat -tunlp | grep 8848

经常用**netstat -tunlp**查看端口占用情况,tunlp是什么意思呢?

t:表示查看tcp

u:表示查看udp

n:表示端口以数字形式表示,没有n直接显示服务名。

l:表示显示所监听的端口

p:表示占用端口的进程
防火墙
systemctl stop firewalld
#开启防火墙
service firewalld start
#禁止开机启动防火墙
systemctl disable firewalld.service


### 2.netstat 命令

用于显示网络状态

```shell
#查看相应端口的服务是否启动成功
netstat -tunlp | grep 8848

经常用**netstat -tunlp**查看端口占用情况,tunlp是什么意思呢?

t:表示查看tcp

u:表示查看udp

n:表示端口以数字形式表示,没有n直接显示服务名。

l:表示显示所监听的端口

p:表示占用端口的进程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值