docker学习总结3 - 镜像、容器、网络、数据卷、compose、自制镜像

1、docker - 镜像命令

1.1 拉取镜像到本地(下载安装包)

docker pull 镜像名字
docker pull tomcat

1.2 删除镜像

docker rmi 镜像标识的前n位
如果该镜像启动过容器,不能直接删除
docker rmi 9

1.3 镜像的导入导出

导出:

docker save -o 绝对路径到文件名 镜像ID
docker save -o /opt/tomcat.image 904a98253fbf

导入:

docker load -i 要导入的镜像文件名
docker load -i tomcat.image

1.4 修改镜像名称

docker tag 镜像的标识 新名字:新版本号
docker tag 904 tomcat:9.0

2、docker - 容器命令

2.1 启动镜像,生成容器

docker run -d -p 8011:8080 --name first_tomcat tomcat:9.0

  • tomcat:9.0 要运行的镜像名字,一般写的是镜像id
  • -d daemon 的首字母,让进行后台运行,非交互式无界面的
  • -p 8011:8080 外网访问tomcat的本来是8080端口,我们将容器里的端口映射到了linux的8011端口,意思就是外网ip+8011就可以访问tomcat了,如果我们不做映射会怎么样,8080能访问到tomcat吗?
  • –name first_tomcat 给容器起了名字叫first_tomcat
  • -i input首字母,保持容器的标准输入
  • -t ternal 保持在终端输入,在前台运行的那种

2.2 查看容器

  • docker ps 查看运行的容器
  • docker ps -q 查看运行的容器标识
  • docker ps -a 查看所有容器
  • docker ps -aq 查看所有容器标识

2.3 查看容器日志

  • docker logs -f 容器标识

2.4 进入容器、退出

  • docker exec -it 容器标识 bash
  • exit

exec 执行的意思
-it 交互式运行
bash linux操作系统的默认界面shell

2.5 停止容器

  • docker stop 容器标识

2.6 启动容器

  • docker start 容器标识

2.7 重动容器

  • docker restart 容器标识

2.8 删除容器

  • docker rm 容器标识

运行状态的容器无法被删除,删除之前先停止容器

  • docker stop $(docker ps -qa)
  • docker rm $(docker ps -qa)

删除所有容器的id

2.9 复制文件

  • docker cp 文件路径及文件名 容器id:容器内部路径
  • docker cp XGYSytest12.war 70:/user/local/tomcat/webapps

3、docker - 网络命令

  • 查询所有网络:docker network ls
  • 删除网络:docker network rm 网络名grid

4、docker - 数据卷/数据映射

类似于共享文件夹,将宿主机的目录作为一个数据卷,映射到容器内部,可供容器使用。

  1. 创建数据卷:docker volume create v-tomcat
  2. 查看数据卷(v-tomcat)信息:docker volume inspect v-tomcat
  3. 查看全部数据卷:docker volume ls
  4. 删除数据卷:docker volume rm 数据卷名
  5. 数据卷的使用:

1、首先创建一个数据卷,然后用数据卷的名称映射到容器内部的路径,当你的数据卷不存在时,docker会自动创建

docker volume create 数据卷
docker run -d -p 80:8080 --name mytomcat -v v-tomcat:/user/local/tomcat/webapps 镜像id

只需要把项目包war放到这个目录v-tomcat的_data目录就可以了,容器就会自动获取

2、docker run -d -p 81:8080 --name tomcat001 -v /opt/volumes/v-tomcat03:/user/local/tomcat/webapps 镜像id

直接指定路径也会自动创建数据卷,最后面的路径不要加/

5、docker-compose 常用命令

5.1 常用命令

官方的开源项目,主要docker容器集群的快速编排,主要是用来批量执行docker run命令

  • docker-compose up -d 【执行yml文件,创建并启动容器】
  • docker-compose down 【关闭并删除容器】
  • docker-compose stop 【关闭】
  • docker-compose start 【启动】
  • docker-compose restart 【重新启动】
  • docker-compose logs -f 【查看日志】

5.2 常用场景

场景1:用docker-compose 管理 mysql 和 tomcat 容器
  1. 编写 docker-compose.yml 文件
services:  # 一个文件可以管理多个服务/容器
  mysql:  # 一个服务的名称
    restart: always  # docker服务启动,容器自动启动 
    image: daocloud.io/library/mysql:5.7.7  # 镜像名称
    container_name: mysql-compose-001  # 容器名称
    ports:  # 端口号,一个容器可以暴露出多个端口号
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456  # 数据库root账号密码
      TZ: Asia/Shanghai  # 数据库采用的时区
    volumes: 
      - /opt/xs/volumes/mysql: /var/lib/mysql  # 数据卷
services:
  mysql:
    restart: always
    image: daocloud.io/library/mysql:5.7.7
    container_name: mysql-compose-001
    ports:
      - 3306:3306
    environment:
      MYSQL_ROOT_PASSWORD: 123456
      TZ: Asia/Shanghai
    volumes:
      - /opt/xs/volumes/mysql:/var/lib/mysql
  tomcat:
    restart: always
    image: daocloud.io/library/tomcat:8.0.45
    container_name: tomcat-compose-001
    ports:
      - 8080:8080
    environment:
      TZ: Asia/shanghai
    volumes:
      - /opt/xs/volumes/webapps:/usr/local/tomcat/webapps
      - /opt/xs/volumes/tomcat/logs:/usr/local/tomcat/logs
  1. 查看已经启动的容器是否占用文件里的端口号
  2. 上传 yml 文件到 /opt/xs/ 目录下
  3. 执行compose命令:docker-compose up -d
场景2:用 docker-compose.yml 管理 Dockerfile 生成镜像并启动
  1. 准备一个 xxx.war 项目文件
  2. 在本地创建一个文件 Dockerfile
  3. 本地创建 docker-compose.yml 【定义了如何启动 Dockfile】
services:
  xs:
    restart: always
    build:
      context: ./
      dockerfile: Dockerfile
    image: xs:1.0
    container_name: xs-tomcat
    ports:
      - 8081:8080
    environment:
      TZ: Asia/Shanghai
services:
  xs:  # 起个名,这个自定义,只要把war文件、Dockerfile、docker-compose.yml  放到一个目录下就行
    restart: always
    build:  # 指定运行 dockerfile文件
      context: ./   # 指定 dockfile 路径
      dockerfile: Dockerfile  # 指定 dockerfile 的名字
    image: xs:1.0  # dockfile 是用来自制镜像的,所以必须指定镜像名字
    container_name: xs-tomcat  # 会启动一个容器,容器名字是 xs-tomcat
    ports: 
      - 8081:8080   # 容器的端口映射到linux的8081
    environment:
      TZ: Asia/Shanghai  # 环境配置是伤害时间
  1. 将以上3个文件放到 /opt/xs2目录下,执行 docker-compose up -d
  2. 注意:

不想重新创建镜像,执行:docker-compose up -d
想重新创建新镜像,执行:docker-compose up -d --build

6、docker - 自制镜像

6.1 制作这个镜像:在原有的tomcat镜像下增加一个war包

  1. 在本地创建一个文件 Dockerfile
from daocloud.io/library/tomcat:8.5.16-jre8-alpine
copy xxx.war /user/local/tomcat/webapps

from 后面是从网站上找的环境,
copy 后面是开发给的包

  1. 根目录下创建了docker_demo文件夹,并将xxx.war、Dockerfile上传到目录下
  2. docker_demo目录下执行 Dockerfile 文件:docker build -t tomcat_001:1.0 .

当前目录下,注意命令最后的点,当前目录下制作了镜像tomcat_001,并且是1.0的版本

6.2 镜像在工作中的使用场景一

  1. 开发创建 Dockerfile ,并且自定义镜像信息

from 指定当前自定义镜像依赖的环境
copy 把一些文件复制到镜像中
workdir 镜像工作目录
cmd 在workdir下要执行的命令

  1. 查看镜像是否创建成功:docker images
  2. 开发把镜像导出给测试、运维:docker save -o 导出的路径和命名 镜像id
  3. 测试把开发给的镜像导入测试服务器中:docker load -i 文件名称
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
docker-compose 搭建的lamp+redis 代码 附上docker-compose # 标准配置文件应该包含 version、services、networks 三大部分, # 其中最关键的就是 services 和 networks 两个部分,下面先来看 services 的书写规则 # 指定版本号 version: '2' services: # 在 services 标签下的第二级标签是 console,这个名字是用户自己自定义,它就是服务名称。 console: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: console # 容器内置名称 hostname: console # 指明路径 build: # context 指定绝对路径或者相对路径 context: ./images/console # dockerfile 指定 Dockerfile 的文件名称 dockerfile: Dockerfile # volumes_from 从其它容器或者服务挂载数据, # 可选的参数是 :ro 或 :rw,前者表示容器只读,后者表示容器数据是可读可写的(默认情况为可读可写的)。 volumes_from: - php # 挂载一个目录或者一个已存在的数据容器,可以直接使用 HOST:CONTAINER 这样的格式 # ,或者使用 HOST:CONTAINER:ro 这样的格式,后者对于容器来说,数据是只读的,这样可以有效保护宿主机的文件系统 volumes: # 使用绝对路径挂载数据 - /root/.ssh/:/root/.ssh/ # 类似于使用 docker run 的效果 我也不知道 不写因为console并不是直接启动导致镜像不会产生 tty: true # web,这个名字是用户自己自定义,它就是服务名称。 web: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: web # 容器内置名称 hostname: web # 指明路径 build: # context 指定绝对路径或者相对路径 context: ./images/nginx # dockerfile 指定 Dockerfile 的文件名称 dockerfile: Dockerfile # 映射端口 ports: - '80:80' # 此选项解决了启动顺序的问题 这个的意思是必须在php启动以后才能启动 # 注意的是,默认情况下使用 docker-compose up web 这样的方式启动 web 服务时, # 也会启动 php 服务,因为在配置文件中定义了依赖关系 depends_on: - php # volumes_from 从其它容器或者服务挂载数据, volumes_from: - php volumes: # 已经存在的命名的数据 - nginx-log:/var/log/nginx # 以 Compose 配置文件为中心的相对路径作为数据挂载到容器 - ./images/nginx/sites-enabled:/etc/nginx/sites-enabled - ./images/nginx/cert:/etc/nginx/cert # 加入指定网络 networks: default: # 同一网络上的其他容器可以使用服务器名称或别名来连接到其他服务的容器 aliases: - web.sunchanghao.top - mid.sunchanghao.top - sevice.sunchanghao.top - admin.sunchanghao.top # php,这个名字是用户自己自定义,它就是服务名称。 php: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: php # 容器内置名称 hostname: php # 服务除了可以基于指定的镜像,还可以基于一份 Dockerfile, # 在使用 up 启动之时执行构建任务,这个构建标签就是 build,它可以指定 Dockerfile # 所在文件夹的路径。Compose 将会利用它自动构建这个镜像,然后使用这个镜像启动服务容器 build: # context 选项可以是 Dockerfile 的文件路径,也可以是到链接到 git 仓库的 url # 当提供的值是相对路径时,它被解析为相对于撰写文件的路径,此目录也是发送到 Docker 守护进程的 context context: ./images/php # 使用此 dockerfile 文件来构建,必须指定构建路径 dockerfile: Dockerfile # 挂载一个目录或者一个已存在的数据容器, volumes: # 以 Compose 配置文件为中心的相对路径作为数据挂载到容器。 - ./app:/mnt/app # db,这个名字是用户自己自定义,它就是服务名称。 db: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: db # 容器内置名称 hostname: db # 从指定的镜像中启动容器,可以是存储仓库、标签以及镜像 ID image: mysql:5.7 environment: MYSQL_USER: 'sch' MYSQL_PASS: '1111' MYSQL_ROOT_PASSWORD: 'root' volumes: - db:/var/lib/mysql ports: - '3306:3306' redis: # 为自定义的容器指定一个名称,而不是使用默认的名称 container_name: redis # 容器内置名称 hostname: redis # image 则是指定服务的镜像名称或镜像 ID。如果镜像在本地不存在,Compose 将会尝试拉取这个镜像。 image: redis:3.2.7 # 设置端口号 ports: - '6379:6379' # 挂载一个目录或者一个已存在的数据容器 volumes: # 已经存在的命名的数据。 - redis:/data # node volumes: nginx-log: # 设置volume的驱动,默认是local. driver: local db: driver: local redis: driver: local
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿_焦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值