【Docker】docker 笔记,mysql,nginx部署
docker 运行 mysql
docker run
:创建并运行一个容器,-d
让容器在后台运行
--name
: 容器的名字
-p
:端口映射,将Linux
的端口与 Docker
容器的端口进行映射。Docker
镜像有隔离的性质,有独立的网络环境,外部无法直接连接 Docker
镜像,要 Linux
与 Docker
进行映射后才可以访问。第一个参数是 Linux
的端口,第二个参数是 Docker
的地址。
-e
:容器的环境变量,由容器的发布者设定。
最后一行 mysql
是运行的镜像的名字
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
mysql
SQLyog 2058错误
允许 root ,其他连接用密码登录
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123';
FLUSH PRIVILEGES;
进入一个docker 容器
查看所有的docker 容器
docker ps
进入一个docker 目录
其中 mysql 是容器的名字(docker ps 中name 对应),这个位置除了用 name ,还可以用容器的编号 (docker ps 中 CONTAINER ID 对应)
docker exec -it mysql /bin/bash
docker exec -it mysql bash
输入 exit
可退出当前环境,退入原生 Linux
环境。
Docker 常见命令
Docker images
:查看所有本地的镜像
Docker rmi
:删除本地镜像
- 如果有镜像已经在运行需要先删除,使用
Dokcer ps
查询,使用Docker rm
删除,之后再用Docker rmi
删除本地的镜像。
Docker start
:开启容器。
Docker stop
:停止容器。
Docker ps
:查看运行的容器进程。
Docker ps -a
:停止的容器也会包含在内
Docker logs
:容器运行的日志。
Docker exec
:进入容器。
-it
:以可输入终端的方式打开bash
:命令行
docker load -i jdk.tar
更多命令,再官网查看。
Reference documentation | Docker Docs
Docker 运行 Nginx
Docker Hub Container Image Library | App Containerization
在 Docker Hub
中找到 Nginx
docker pull nginx
docker run -d \
--name nginx \
-p 80:80 \
nginx
Docker ps
格式化显示。
docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}" -a
Docker 数据卷 (Volume)
Docker
容器是一个镜像运行的最小环境,也就是说很多文件操作,vim
命令都没有实现。
数据卷就是一个解决此问题的一个技术。
查看 volume
相关命令。
docker volume --help
注意:只有在
docker run
执行时,带上-v 数据卷:内容的目录
参数才能实现挂载,如果容器已经创造是无法再进行挂载的!
在创建 Nginx 时,挂载 html静态目录
在 Docker
中 html
目录位置为 /usr/share/nginx/html
删除之前创建的 nginx
容器。
docker rm -f nginx
创建新的 nginx
docker run -d \
--name nginx \
-p 80:80 \
-v html:/usr/share/nginx/html \
nginx
docker volume ls
docker volume inspect html
由于使用空间的问题,有些数据会自动挂载在宿主机,形成匿名卷
。
在删除镜像时,这些存在宿主机的数据,数据卷映射会被删除,但是文件并不会删除,就会形成数据的冗余。
指定本地目录挂载数据卷
-v 本地目录:内容的目录
- 本地目录必须以
/
,或者./
开头,不加这些会被识别成数据卷,挂载在之前的提到的那个固定位置。
docker run -d \
--name mysql \
-p 3306:3306 \
-e TZ=Asia/Shanghai \
-e MYSQL_ROOT_PASSWORD=123 \
-v /root/mysql/data:/var/lib/mysql \
-v /root/mysql/init:/docker-entrypoint-initdb.d \
-v /root/mysql/conf:/etc/mysql/conf.d \
mysql
自定义镜像
在 Linux
中部署 java
应用的步骤
- 准备
Linux
服务器 - 按照
JRE
并配置环境 - 拷贝
jar
包 - 运行
jar
包
使用
Dockerfile
来构建自己的镜像
详细文档:Dockerfile reference | Docker Docs
从 ubuntu
开始制作镜像
# 指定基础镜像
FROM ubuntu:20.04
# 配置环境变量,JDK安装,容器内时区
ENE JAVA_DIR=/usr/local
COPY ./jdk8.tar.gz $JAVA_DIR/
COPY ./docker-demo.jar /tmp/app.jar
# 安装 jdk
RUN cd $JAVA_DIR \ && tar -xf ./jdk8.tar.gz \
&& mv ./jdk1.8.0_144 ./java8
# 配置环境变量
ENV JAVA_HOME=$JAVA_DIR/java8
ENV PATH=$PATH:$JAVA_HOME/bin
# 入口, java项目启动项
ENTRYPOINT ["java","-jar","/app.js"']
上面做的步骤,变化的只有指定 jar
包,其实 java
环境也有人已经做好了,我们只用做导入 jar
包就行了
从 jdk
开始做镜像
写成 dockerfile
文件
# 基础镜像
FROM openjdk:11.0-jre-buster
# 设定时区
ENV TZ=Asia/Shanghai
# 拷贝 jar 包
COPY docker-demo.jar /app.jar
# 入口
ENTRYPOINT ["java","-jar","/app.js"]
运行
.
:最后的 .
是指定 Dokcerfile
所在的目录在当前的目录下
docker build -t myImage:1.0 .
运行镜像
docker run -d --name dd -p 8080:8080 docker-demo
Docker 网络
把不同的容器放入同一个网络中
docker network name0
# 在创建容器时指定网络
docker run -d --name dd -p 8080:8080 --network name0 docker-demo
# 创建容器后,加入网络
docker network connect name0 dd
Ubuntu 防火墙
安装防火墙工具
sudo apt-get install ufw
开启,重启,关闭
sudo ufw enable
sudo ufw reload
sudo ufw disable
查看状态
sudo ufw status
开放端口,关闭端口
sudo ufw allow 22
sudo ufw delete allow 22