首页 > 其他分享 >docker

docker

时间:2023-10-29 21:23:47浏览次数:36  
标签:容器 端口 nginx mysql 镜像 docker

Docker

目录

1

安装

镜像和容器

  • 镜像:应用+应用所需的环境,配置,系统函数库
  • 容器:docker运行时创建隔离环境,避免相互影响
  • 镜像仓库:hub.docker.com

命令解读

docker run -d \
  --name mysql \
  -p 3306:3306 \
  -e TZ=Asia/Shanghai \
  -e MYSQL_ROOT_PASSWORD=123 \
  mysql
  • docker run -d :创建并运行一个容器,-d则是让容器以后台进程运行
  • --name mysql : 给容器起个名字叫mysql,你可以叫别的
  • -p 3306:3306 : 设置端口映射。
    • 容器是隔离环境,外界不可访问。但是可以宿主机端口****映射容器内到端口,当访问宿主机指定端口时,就是在访问容器内的端口了。
    • 容器内端口往往是由容器内的进程决定,例如MySQL进程默认端口是3306,因此容器内端口一定是3306;而宿主机端口则可以任意指定,一般与容器内保持一致。
    • 格式: -p 宿主机端口:容器内端口,示例中就是将宿主机的3306映射到容器内的3306端口
  • -e TZ=Asia/Shanghai : 配置容器内进程运行时的一些参数
    • 格式:-e KEY=VALUE,KEY和VALUE都由容器内进程决定
    • 案例中,TZ=Asia/Shanghai是设置时区;MYSQL_ROOT_PASSWORD=123是设置MySQL默认密码
  • mysql : 设置镜像名称,Docker会根据这个名字搜索并下载镜像
    • 格式:REPOSITORY:TAG,例如mysql:8.0,其中REPOSITORY可以理解为镜像名,TAG是版本号
    • 在未指定TAG的情况下,默认是最新版本,也就是mysql:latest

2

docker基础

常见命令

  • docker exec -it nginx bash
    • 连接已启动的nginx容器
  • docker run -d --name nginx -p 80:80 nginx
  • docker load -i jdk.tar

image-20231027221848893

image-20231027221810063

命令别名

# 修改/root/.bashrc文件
vi /root/.bashrc
内容如下:
# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
alias dps='docker ps --format "table {{.ID}}\t{{.Image}}\t{{.Ports}}\t{{.Status}}\t{{.Names}}"'
alias dis='docker images'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

#使命令生效
source /root/.bashrc

数据卷

  • 本来修改:需要进入容器,然后修改,且

  • 问题:镜像只提供最小化的系统环境,提供当前应用对应镜像必备的系统函数,如什么vi,ll等操作都没有,无法在里面修改文件等

  • 解决:挂载数据卷,直接在宿主机的对应文件上修改即可

  • 数据卷:volume,虚拟目录,容器内目录与宿主机目录之间映射的桥梁

  • 位置:/var/lib/docker/volumes

  • 命令

    • docker volume create 创建
    • docker volume ls 查看
    • docker volume rm 删除
    • docker volume inspect 数据卷名 查看某个数据卷详情
    • docker volume prune 清除数据卷
    • docker run -v 数据卷:容器内目录 注意必须要在创建容器时!!(数据卷的名字可以自己取)
  • docker inspect 容器名

    • 查看容器详情,如数据卷挂载信息等

本地目录挂载

  • 容器会自动生成匿名卷

  • 缺点:名称复杂,不好找,删容器后没同步

  • 解决:挂载到本地目录下

  • -v 本地目录:容器内目录

  • (挂载时不知道文件位置都可以去hub.docker.com里查官方镜像文档

镜像

  • 结构:分层
    • 一些基础部分可以复用
    • 最底层:基础镜像
    • 最顶层:入口

Dockerfile

  • 指令 说明
    FROM 指定基础镜像
    ENV 设置环境变量,可在后面指令使用
    COPY 拷贝本地文件到镜像的指定目录
    RUN 执行Linux的shell命令,一般是安装过程的命令
    EXPOSE 指定容器运行时监听的端口,是给镜像使用者看的
    ENTRYPOINT 镜像中应用的启动命令,容器运行时调用
  • 官方文档:https://docs.docker.com/engine/reference/builder/

  • docker build -t myImage:1.0 .

    • -t 表示给镜像取名
    • myImage 镜像名
    • . 指定dockerfile所在的目录,当前目录就为.

docker网络

  • 问题:docker0分的ip地址,如果关掉再重启可能会变化
  • 解决:自定义网络容器,可以通过容器名互联
命令 说明
docker network create 创建一个网络
docker network ls 查看所有网络
docker network rm 删除指定网络
docker network prune 清除未使用的网络
docker network connect 使指定容器连接加入某网络
docker network disconnect 使指定容器连接离开某网络
docker network inspect 查看网络详细信息
  • 创建的时候加--network 网络容器名,可以在创建容器的时候连接,且不会再连接默认网桥

3

项目部署

  • Maven中 package(跳过单元测试),然后将jar放到虚拟机中,构建镜像,创建并运行容器

  • 容器名互联 记得要在一个网络!

DockerCompose

version: "3.8"

services:
  mysql:
    image: mysql
    container_name: mysql
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai
      MYSQL_ROOT_PASSWORD: 123
    volumes:
      - "./mysql/conf:/etc/mysql/conf.d"
      - "./mysql/data:/var/lib/mysql"
      - "./mysql/init:/docker-entrypoint-initdb.d"
    networks:
      - hm-net
  hmall:
    build: 
      context: .
      dockerfile: Dockerfile
    container_name: hmall
    ports:
      - "8080:8080"
    networks:
      - hm-net
    depends_on:
      - mysql
  nginx:
    image: nginx
    container_name: nginx
    ports:
      - "18080:18080"
      - "18081:18081"
    volumes:
      - "./nginx/nginx.conf:/etc/nginx/nginx.conf"
      - "./nginx/html:/usr/share/nginx/html"
    depends_on:
      - hmall
    networks:
      - hm-net
networks:
  hm-net:
    name: hmall
  • 命令:docker compose [OPTIONS] [COMMAND]
    • 表格里前俩是options
参数或指令 说明
-f 指定compose文件的路径和名称
-p 指定project名称。project就是当前compose文件中设置的多个service的集合,是逻辑概念
up 创建并启动所有service容器
down 停止并移除所有容器、网络
ps 列出所有启动的容器
logs 查看指定容器的日志
stop 停止容器
start 启动容器
restart 重启容器
top 查看运行的进程
exec 在指定的运行中容器中执行命令

标签:容器,端口,nginx,mysql,镜像,docker
From: https://www.cnblogs.com/xiaoyangii/p/17796490.html

相关文章

  • 在Docker容器内,我如何连接到机器的本地主机?
    内容来自DOChttps://q.houxu6.top/?s=在Docker容器内,我如何连接到机器的本地主机?我有一个运行在Docker容器内的Nginx。我的主机系统上运行着一个MySql。我想从我的容器内连接到MySql。MySql只绑定到本地主机设备。有没有办法从这个Docker容器内连接到这个MySql或其他在本地......
  • 在Docker上搭建ELK+Filebeat日志中心
    当前环境1.系统:centos 72.docker1.12.1介绍ElasticSearchElasticsearch是一个实时的分布式搜索和分析引擎,它可以用于全文搜索,结构化搜索以及分析。它是一个建立在全文搜索引擎ApacheLucene基础上的搜索引擎,使用Java语言编写。LogstashLogstash是一个具有实时渠道......
  • Ubuntu环境下docker的安装和基本使用
    docker是一个基于GoLang的应用容器引擎,它轻量级的沙箱化特性让它在服务器运维方面不可或缺。docker的优势和特性本篇不再赘述,着重记录Ubuntu环境下docker快速安装和基本使用。docker引擎本身是跨平台的,在不同Linux、Mac和win环境有不同的实现,而win环境则依托于vbox和hyper-v的虚拟......
  • nexus3 作为docker仓库与镜像缓存的记录
    因为搞k8s拉取镜像太慢,不同版本每次都要等待半天,用nexus3作为docker镜像的缓存与仓库镜像,虽然权限控制弱一些,够用,记录用法及踩坑。1作为镜像缓存,唯一的坑,就是第一次拉取及后续拉取镜像,没有缓存,也不晓得为啥配置了 insecure-registries和 registry-mirrors没生效,iftop观察流......
  • 收藏从未停止,练习从未开始——MYSQL游标存储过程IDEA快捷键配置SpringBoot入门到入土G
    “收藏从未停止,练习从未开始”,或许有那么一些好题好方法,在被你选中收藏后却遗忘在收藏夹里积起了灰?今天请务必打开你沉甸甸的收藏重新回顾,分享一下那些曾让你拍案叫绝的好东西吧!本人详解:(提醒:随笔)本人详解作者:王文峰,参加过2020年度博客之星,《Java王大师王天师》作者采购供应链共享......
  • 【SpringBoot】Docker部署
    docker部署是主流的部署方式,极大的方便了开发部署环境,保持了环境的统一,也是实现自动化部署的前提。1项目的目录结构package:点击打包,生成xxx-SNAPSHOT.jartarget目录:打包生成目录,生成的jar存放位置Dockerfile:跟项目根目录同级2创建Dockerfile#Docker镜像构......
  • Cannot connect to the Docker
    执行docker基础命令失败!CannotconnecttotheDockerdaemonatunix:///var/run/docker.sock.Isthedockerdaemonrunning?原因:docker服务没有启动。解决方法:执行systemctlstartdocker即可。......
  • Linux 下使用 Docker 安装 Redis
    1、下载redisdockerpullredis:6.2.62、提前创建挂载目录mkdir-p/mydata/redis/confmkdir-p/mydata/redis/datamkdir-p/mydata/redis/logtouch/mydata/redis/conf/redis.conftouch/mydata/redis/log/redis.logchmod777/mydata/redis/log/redis.log3、启......
  • docker容器成为新镜像
     dockerps打开终端并运行以下命令,以获取你要创建新镜像的容器的ID。使用dockercommit命令创建新镜像:dockercommit<container-id><new-image-name>dockercommitd47ae73c6ded chatdb-ai验证新镜像:dockerimages  上传到阿里云#需要先登录dockerlogin-......
  • docker的安装、配置与使用
    docker的安装、配置与使用问题1:安装docker后卡在"startingthedockerengine"解决方法:按Win键,输入Hyper-V,在“启用或关闭Windows功能”中启用Hyper-V。如果没有解决,还需要在Docker窗口右上登录账户。之后重启Docker。Push镜像的注意事项首次push需要登录(Linux系统用指......