用 心 生 活 , 用 心 爱 |

Hello霖

园龄:4年1个月粉丝:4关注:0

【Docker】镜像容器使用

..跳过安装docker教程,直接开始

一.容器镜像加速

拉取镜像速度太慢,使用阿里云的镜像加速
地址:https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

找到容器镜像加速,按操作文档cv重启docker即可




二.镜像仓库/下载镜像

这里是单独下载镜像,并不是启动运行镜像容器,可以略看,后面的三创建并启动容器,如果没有下载镜像的话会直接下载镜像,可以用下面的命令,不需要单独下载镜像。

  • docker镜像搜索命令是

docker search 镜像名称

效果没有可视化好,直接用下面的网站,在里面搜索然后复制命令下载


- 需要的镜像在这里搜索:

https://hub.docker.com

格式: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 中国大陆许可协议进行许可。

posted @   Hello霖  阅读(36)  评论(0编辑  收藏  举报
历史上的今天:
2022-10-09 【Vue】axios请求拦截器+封装统一接口管理
2022-10-09 【SpringBoot】解决redis 查找/删除缓存失败问题
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起