Docker初步使用
部署MySql
docker run -d\
--name mysql\
-p 3306:3306\
-e TZ=Asia/Shanghai\
-e MYSQL_ROOT_PASSWORD=123\
mysql
命令解读
docker run :创建并运行一个容器,-d是让容器在后台运行
–name mysql:给容器起别名,必须唯一
-p 3306:3306:设置端口映射
-e KEY=VALUE:设置环境变量
mysql:指定运行镜像的名字
docker基础
docker pull nginx //下载镜像
docker images //查看
docker save -o nginx.tar nginx:latest //保存镜像
docker rmi nginx:latest //删除镜像
docker load -i nginx.tar //加载镜像
docker run -d --name nginx -p 80:80 nginx //创建并运行镜像
docker stop nginx //停止容器
docker ps -a //查看所有容器
docker start nginx //运行镜像
docker logs nginx //查看日志 持续查看加-f (logs -f name)
docker exec -it nginx bash //进入容器进行操作 exit退出
docker rm nginx -f //删除容器
数据卷
- 数据卷(volume)是一个虚拟目录,是容器内目录与宿主机目录之间映射的桥梁
docker run -d --name nginx -p 80:80 -v html:/usr/share/nginx/html nginx //创建数据卷
docker volume ls //查看数据卷
docker volume inspect html //查看卷的挂载信息
docker inspect mysql
- linux文件编辑
vi vim --编辑文件
命令行模式
dd 删除(剪切)光标所在行
3dd 删除(剪切)光标所在行及下面两行
p 粘贴
yy 复制光标所在行
4yy 复制光标所在行及下面三行
G 光标快速定位到最后一行
gg 光标快速定位到第一行
u 撤销上一步操作插入模式 (按i进入)
最后行模式 (按:进入)
:set nu 显示行号
:5 光标快速定位到第5行
:q 退出
:w 保存
:! 强制执行
:1,$/nologin/888888/g 把第一行到最后一行的nologin替换成888888
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
保存后
bash dockerfile运行文件
自定义镜像
- 创建Dockerfile
FROM openjdk:11.0-jre-buster
ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
COPY store-0.0.1-SNAPSHOT.jar /app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
docker build -t mydocer_img .
.代表自动调用当前目录下的Dockerfile
运行
docker run -d --name dd -p 8080:8080 mydocer_img
查看日志
docker logs -f dd
总结
网络
- 加入方式
-
创建时候加入–network 网络名
-
容器已存在加入
docker network connect mynet mysql
docker network connect 网络名 容器名
- 加入自定义网络的容器可以通过容器名互相访问
DockerCompose
docker compose通过一个单独的docker-compose.yml配置文件来管理多个docker容器,帮助我们实现多个相互关联的Docker容器的快速部署。
version: "1.0"
services:
mysql:
image: mysql
container_name: mysql
ports:
- "3306:3306"
environment:
TZ: Asia/Shanghai
MYSQL_ROOT_PASSWORD: 123
volumes:
- "./mysql/data:/var/lib/mysql"
- "./mysql/conf:/etc/mysql/conf.d"
- "./mysql/init:/docker-entrypoint-initdb.d"
networks:
- demoNet
store:
build:
context: ./demo
dockerfile: Dockerfile
container_name: store
ports:
- "8080:8080"
networks:
- demoNet
depends_on:
- mysql
networks:
demoNet:
name: demo_Net
执行指令创建
docker compose up -d
执行指令删除
docker compose down
后续
容器自启动分为两种情况
一为新建容器时配置自启参数
docker run --restart=always 容器id 或 容器名称
二为已存在的容器配置自启
docker update --restart=always 容器id 或 容器名称
取消容器自启
docker update --restart=no 容器id 或 容器名称
批量设置容器自启
docker update --restart=always $(docker ps -aq)
部署项目服务器时,为了应对停电等情况影响正常web项目的访问,会把Docker容器设置为开机自动启动。
在使用docker run启动容器时,使用–restart参数来设置:
docker run -m 512m –memory-swap 1G -it -p 58080:8080 –restart=always –name bvrfis –volumes-from logdata mytomcat:4.0
–restart具体参数值详细信息:
no - 容器退出时,不重启容器;
on-failure - 只有在非0状态退出时才从新启动容器;
always - 无论退出状态是如何,都重启容器;
如果创建时未指定 –restart=always ,可通过update 命令设置
docker update –restart=always xxx
还可以在使用on - failure策略时,指定Docker将尝试重新启动容器的最大次数。默认情况下,Docker将尝试永远重新启动容器。
sudo docker run –restart=on-failure:10 redis