【Docker】镜像容器使用
..跳过安装docker教程,直接开始
一.容器镜像加速
拉取镜像速度太慢,使用阿里云的镜像加速
地址:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors
找到容器镜像加速,按操作文档cv重启docker即可
二.镜像仓库/下载镜像
这里是单独下载镜像,并不是启动运行镜像容器,可以略看,后面的三创建并启动容器,如果没有下载镜像的话会直接下载镜像,可以用下面的命令,不需要单独下载镜像。
- docker镜像搜索命令是
docker search 镜像名称
效果没有可视化好,直接用下面的网站,在里面搜索然后复制命令下载
- 需要的镜像在这里搜索:
格式:docker pull 镜像名称:版本号
docker pull mysql:5.7
docker pull nginx
不填写版本号默认拉取最新版本
三.创建并运行容器
注意:run命令是创建并运行一个新容器,如果停止容器运行后,使用run是新创建一个,要重新运行容器需要用start命令
命令:docker run [OPTIONS] IMAGE [COMMAND] [ARG...]
OPTIONS:选项,需要关注 -d,-p,-v,-e,--restart这几个选项
IMAGE:镜像信息,推荐用镜像名:tag 的写法,
COMMAND:创建容器后要执行的命令
ARG:COMMAND命令的参数,可多个
例子:
这里是默认运行方式,可能会有问题,例如Nginx的镜像默认启动命令是在前台运行,docker run 运行后会占住linux命令窗口,所以建议用后台运行的方式启动
运行nginx容器:docker run nginx:latest
运行nginx容器后并执行ls命令:docker run nginx:latest ls
运行nginx容器(后台运行):docker run -d nginx:latest
四.docker基础命令
1.查看已拉取的镜像列表
docker images
2.查看正在运行的容器
docker ps
3.查看全部容器
docker ps -a
4.过滤查看已退出的容器
docker ps -f status=exited
5.删除容器
docker rm 容器id
docker rm -f 容器id 强制删除正在运行的容器
docker rm -f $(docker -aq) 强制删除全部容器
docker rm -f status=exited -q 强制删除退出的容器
6.查看容器日志
docker logs 容器id 输出一次日志
docker logs -f 容器id 持续输出日志
docker logs -n 5 容器id 输出容器5条日志
7.停止运行容器
docker stop 容器id
五.进入容器执行命令
每个容器都是一个小虚拟机,可以直接进入后像在linux一样执行命令
docker exec -it 容器id/名 bash
容器内执行exit退出容器回到主机
六.主机/容器文件拷贝
主机文件拷贝到容器
例如 主机 /home 目录下有文件 hello
需要拷贝到容器id为226d2f0157b4的容器
命令格式:docker cp 主机的文件路径 容器id:容器的存放文件位置
docker cp /home/hello 226d2f0157b4:/home/hello
提示Successfully copied 2.05kB to 226d2f0157b4:/home/hello 拷贝成功
容器文件拷贝到主机
命令需要在主机窗口执行
容器内位置文件 /etc/rabbitmq/enabled_plugins
将enabled_plugins拷贝到主机的/home/下 ,则这么写
命令格式:docker cp 容器id:文件路径 主机存放文件路径
docker cp 226d2f0157b4:/etc/rabbitmq/enabled_plugins /home/enabled_plugins
Docker卷(volume)功能,主机和容器文件共享
安装在容器内的文件,在主机中也实时显示一份(映射显示,非拷贝),有时候我们安装mysql,我们重要的就是数据库文件,其它的配置文件不需要保存,
我们创建的时候就可以单独把容器内数据库的文件放到主机上,而其它不重要的文件不需要,这样子,可以在主机上备份我们的重要文件,当容器炸了,那么也不会影响主机上保存的。
挂载后的指定文件其实是存在主机上的,在容器内也能看到这个文件,但其实是映射进去的
例如安装青龙面板:
docker run -dit
-v $PWD/ql/config:/ql/config
-v $PWD/ql/log:/ql/log
-v $PWD/ql/db:/ql/db -p 5700:5700
--name ql
--restart always
whyour/qinglong:latest
-dit:这是三个选项的组合。-d 表示在后台运行容器,-i 表示以交互模式运行容器,-t 表示为容器分配一个伪终端
-v :卷挂载功能
$PWD:当前在linux的目录
$PWD/ql/config: 当前目录+指定位置目录
$PWD/ql/config:/ql/config :当前目录+指定位置目录 和 容器里的/ql/config文件进行实时映射
-p:主机的5700端口和容器的5700端口进行映射
-name:为容器设置个名字,因为安装的是青龙面板,简写成ql
--restart always:启动策略,always停止后总是重新启动
whyour/qinglong:latest:要运行的容器名称,latest是标签 一般当是版本标签
把容器当成一个linux系统, 那么docker的/ql/config文件 就会和 主机的 /ql/config文件 进行同步共享(互相修改更新都会实时同步)
自己打包一个镜像来用
用java写了个程序,打包成 myapp.jar
现在要用容器的方式来启动它,这样搞:
1.创建 Dockerfile:
在 Java 项目的根目录下创建一个名为 Dockerfile 的文件。这个文件定义了如何构建 Docker 镜像。
FROM openjdk:8-jdk-alpine
COPY ./your-app.jar /usr/app/
WORKDIR /usr/app
ENTRYPOINT ["java", "-jar", "your-app.jar"]
FROM openjdk:8-jdk-alpine 指定了基础镜像,因为新创建的容器是没有java环境的,会跑不起来,所以要在这个别人弄好的 有java环境容器的基础上,再加入我们的jar包后再进行打包,
COPY ./myapp.jar /usr/app/ 将Java 程序(假设它的名字是 myapp.jar)复制到 Docker 容器的 /usr/app/ 目录
WORKDIR /usr/app 将工作目录设置为 /usr/app/
ENTRYPOINT ["java", "-jar", "your-app.jar"] 指定了启动容器时要运行的命令
2.构建 Docker 镜像
在 Dockerfile 所在的目录下运行以下命令来构建 Docker 镜像:
docker build -t your-app .
-t myapp 为容器指定了一个名字,
. 指定了 Dockerfile 所在的目录。
3.运行 Docker 容器
docker run -d -p 8080:8080 myapp
-d 选项让 Docker 容器在后台运行,
-p 8080:8080 将 Docker 容器的 8080 端口映射到宿主机的 8080 端口,
myapp 之前构建的容器镜像的名字
本文作者:Hello霖
本文链接:https://www.cnblogs.com/Hello233/p/17751718.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
2022-10-09 【Vue】axios请求拦截器+封装统一接口管理
2022-10-09 【SpringBoot】解决redis 查找/删除缓存失败问题