Docker
docker基础
1.docker基本组成
- 镜像(image)
- 容器(container)
- 仓库(repository)
2.Docker帮助启动命令
- 启动docker: systemctl start docker
- 停止docker: systemctl stop docker
- 重启docker: systemctl restart docker
- 查看docker状态:systemctl status docker
- 开机启动docker: systemctl enable docker
- 查看docker总体帮助文档:docker --help
- 查看docker命令帮助文档:docker 具体命令 --help
3.Docker镜像命令
- docker pull 镜像名称:拉取镜像
- docker images:显示所有镜像
- docker rmi:删除镜像
- docker search 镜像名称:搜索镜像
4.Docker容器命令
-
docker run [OPTIONS] IMAGE [COMMAND] [ARG…]
- -d:后台运行容器,并返回容器ID;
- -i: 以交互模式运行容器,通常与 -t 同时使用;
- -p: 端口映射,格式为:主机(宿主)端口:容器端口
- -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
- –name=nginx-lb: 为容器指定一个名称;
- --restart=always 开机自启
-
docker cp拷贝文件
-
docker start/stop/restart
…具体查看文档
5.Docker提交到私人仓库
-
下载registry
-
docker pull registry
-
-
打包容器
-
docker commit -a [作者名] -m [描述] [容器ID] [名称:版本] docker commit -a bobobo -m demo a8ga412a51 nginx:1.0
-
-
打包镜像
-
docker tag [镜像id] [仓库路径/名称:版本] docker tag j23sadf7b1 192.168.110.173:5000/nginx:1.0
-
-
上传
-
docker pull 192.168.110.173:5000/nginx:1.0
-
6.Docker容器挂载
如果出现cannot open directory…:Permission denied情况
解决方案:挂载的时候多加一个–privileged=true
安装篇
MySql安装
-
docker pull mysql:5.7.30
-
docker run -d -p 3306:3306 --name mysql --privileged=true -v 本机日志目录:/var/log/mysql/ -v 本机my.cnf路径:/etc/my.cnf -v 本机data目录路径:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=初始化密码 镜像ID
Redis安装
-
docker pull redis:版本
-
docker run -d -p 6379:6379 --name redis --privileged=true -v 本地redis.conf配置文件路径:/etc/redis/redis.conf -v 本地redis数据data路径:/data redis镜像id或者redis:版本号 redis-server /etc/redis/redis.conf
Nacos安装
-
docker pull nacos:版本
-
docker run --network my_network -v /data/docker/nacos/conf/application.properties:/home/nacos/conf/application.properties --env MODE=standalone --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 zhusaidong/nacos-server-m1:2.0.3
RabbitMQ安装
-
docker pull rabbitmq:版本
-
docker run -d --name rabbitmq --network my_network -p 5672:5672 -p 15672:15672 -v /data/docker/rabbitmq/mq:/var/lib/rabbitmq rabbitmq:3.9.7
Docker高级篇
DockerFile
命令
FROM
描述
- 基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模版,第一条必须是from
MAINTAINER
描述
- 镜像的维护者的姓名和邮箱地址
RUN
描述
- 容器构建时需要运行的命令
- 两种格式
- shell格式
- exec格式
- RUN是在docker build时运行 RUN等同于在容器终端操作的shell命令
- 两种格式
EXPOSE
描述
- 当前容器对外暴露的端口
WORKDIR
描述
- 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点 比如docker exec 进入容器后 一般默认是/ 通过WORKDIR可以指定落脚点
USER
描述
- 指定该用户在什么样的用户去执行,如果都不指定,默认是root
ENV
描述
- 用来在构建镜像中,构建环境变量 类似profile中的export 作用域在此文件
ADD
描述
- ADD=COPY+解压,将宿主机目录下的文件拷贝进镜像并且会自动处理URL和解压tar压缩包
COPY
描述
-
copy相当于docker cp 复制,类似ADD,拷贝文件和目录到镜像中。
将从构建上下文目录中<源路径>的文件/目录复制到新的一层的镜像的<目标路径>位置
- COPY src dest
- COPY [“src”,“desc”]
- <src源路径>:源文件或者源目录
- <dest目标路径>:容器内的指定路径,该路径不用事先建好,docker会自动建立
VOLUME
描述
- 容器卷,相当于 -v 挂载
CMD
描述
- 指定容器启动后要干的事情,CMD指令的格式和RUN相似,也是两种格式
- shell 格式:CMD 命令
- exec格式:CMD [“可执行文件”,“参数1”,“参数2”…]
- 参数列表格式: CMD [“参数1”,“参数2”…] 。在指定ENTRYPOINT指令后用CMD指定具体参数。
注意
-
Dockerfile中可以有多个CMD指令,但只有最后一个生效,CMD会被docker run之后的参数替代
-
参考官网Tomcat的dockerfile演示讲解
-
官网最后一行的命令
-
EXPOSE 8080 CMD ["catalina.sh","run"]
-
-
他和前面的RUN命令的区别
- CMD是在docker run时运行
- RUN是在docker build时运行
ENTRYPOINT
描述
- 也是用来指定一个容器启动时需要运行的命令
- 类似于CMD指令,但是ENTRYPOINT不会被docker run后面的命令覆盖,而且这些命令行参数会被当作参数送给ENTRYPOINT指令指定的程序
命令格式和案例说明
优点
注意
Docker网络
网络模式
- brideg模式:使用–network bridge指定 默认使用docker0
- host模式:使用–network host指定
- none模式:使用–network none指定
- container模式:使用–network container:NAME或者容器ID指定
compose
docker-compose.yml文件
version: "3"
services:
microService: #自定义名称
image: zzyy_docker:1.6
container_name: demoservice
ports:
- "6001:6001"
volumes:
- /data//service/ceshiService:/data
networks:
- my_system
depends_on:
- redis
- mysql
redis: #自定义名称
image: redis:6.2.6
container_name: redis
ports:
- "6379:6379"
volumes:
- /data/redis/conf/redis.conf:/etc/redis/redis.conf
- /data//redis/data:/data
networks:
- qzx_system
command: redis-server /etc/redis/redis.conf
mysql: #自定义名称
image: mysql:5.7
container_name: mysql
environment:
MYSQL_ROOT_PASSWORD: "123456"
MYSQL_ALLOW_EMPTY_PASSWORD: "no"
MYSQL_DATABASE: "db2021"
MYSQL_USER: "zzyy"
MYSQL_PASSWORD: "zzyy123"
ports:
- "3306:3306"
volumes:
- /data/mysql/db:/var/lib/mysql
- /data/mysql/conf/my.cnf:/etc/my.cnf
- /data/mysql/init:/docker-entrypoint-initdb.d
networks:
- qzx_system
command: --default-authentication-plugin=mysql_native_password #解决外部无法访问
networks:
qzxSystem:
Docker可视化工具Portainer
-
docker run -d -p 8000:8000 -p 9000:9000 --name protainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v protainer_data:/data protainer/protainer