docker容器技术

本文围绕 Ubuntu 22.04 系统,介绍了 Docker 和 MySQL 的安装方法。详细阐述了 Docker 镜像的查找、拉取、查看和删除操作,以及容器的运行、查看、登入、启停等管理方法。还涉及 Docker 卷与绑定挂载、自定义镜像构建、多容器项目和 Docker Compose 的使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一,Ubuntu22.04安装docker

Ubuntu22.04安装docker - 知乎 (zhihu.com)

关于ubuntu 无法 与windows相互复制粘贴文字

sudo apt-get autoremove open-vm-tools
sudo apt-get install open-vm-tools-desktop

  然后重启 就可以成功解决问题

二.Ubuntu22.04安装mysql

Ubuntu22.04安装mysql_人生短短几个秋啊的博客-优快云博客

三.docker镜像

1.镜像查找

docker search 镜像名

sudo docker search redis

2.镜像拉取

docker pull 镜像名

sudo docker pull redis

3.镜像列表查看

docker images

4.镜像删除

docker rmi 镜像名称:标签或镜像id

sudo docker rmi redis

四.容器管理

1.容器运行

docker run [options] image [command] [agrs]

  • -d :表示后台运行
  • --name :容器名
  • -p :表示端口:宿主机(Linux主机)端口:容器端口
  • -e : 环境变量
  • sudo docker run -d --name mysqlDocker -p 3307:3306 -e MYSQL_ROOT_PASSWORD=861127 mysql:latest

2.容器查看

sudo docker ps

查看日志:

docker logs 容器ID

 3.容器登入

docker exec [options] container command [args]

docker exec -it mysqlDocker /bin/bash

  • -i :表示保持标准输入开放,允许该容器通过标准输入进行交互
  • -t : 表示为该容器分配一个伪终端,供用户交互
  • -it :表示显示在linux上
  • mysqlDocker:表示容器名
  • /bin/bash:表示command
  • exit :表示退出

docker attach [options] container :也可以用于登入

4.容器启停

停止容器:

docker stop [options] container [container]

  • -t :表示停止该容器前等待的秒数

启动容器:

docker start  [options] container [container]

 5.容器自启动

systemctl start docker    //启动
systemctl status docker   //查询
systemctl stop docker     //停止
systemctl restart docker  //重启

6.容器删除

docker rm [options] container [container]

例子:docker rm mysqlDocker

7.容器数据拷贝

docker cp [options] container:src_path dest_path    容器向宿主机拷贝

docker cp [options] src_path container:dest_path     宿主机向容器拷贝

  • -a:复制前用户与组信息
  • src_path:源路径
  • dest_path:目标路径
  • container:容器名

8.容器导出与镜像导入

容器导出本地文件:

docker export [options] container

  • -o:容器导出到本地文件中

 

将容器所导出的本地文件导入为本地镜像

docker import file [repository[:tag]]

  • [repository]:由本地文件导入生成的镜像仓库名
  • [:tag]:生成镜像的标签

9.自定义镜像创建

docker commit [options] container [repostory[:tag]]

  • -a:作者信息
  • -m:提交时的备注说明
  • -p:后面给出true时,则在提交创建自定义镜像时暂时当前容器运行
  • container:容器名
  • [repostory]:镜像仓库源
  • [:tag]:生成镜像的标签

五.Docker卷与绑定挂载

(作用:持久化存储,文件共享)

1.创建卷(首先要先启动容器)

sudo docker volume create 卷名

2.卷列表查看

sudo docker volume ls 

3卷列表内容查看

sudo docker inspect 卷名

4.卷删除

sudo docker volume rm 卷名

移除所有未被使用的本地卷

sudo docker volume prune

5.绑定挂载(需要先停止你需要的镜像,然后删除,在执行下面的操作)

sudo docker run -d --name mysqlDocker --mount type=bind,source=/home/dhy/data_bind,target=/var/lib/mysql -p 3307:3306 -e MYSQL_ROOT_PASSWORD=861127 mysql:latest

6.Docker对象查询

docker inspect [OPTIONS] NAME|ID [NAME|ID...]

-f 选项参数 

 六.自定义镜像构建

1.Dockerfile基本结构

#1.基础镜像信息
FROM centos
#2.维护者信息
MAINTAINER studk
#3.镜像操作命令
RUN yum install -y wget
#4.容器启动时执行指令
CMD touch /root/hello && ls -la /root/

2.Dockerfile镜像构建流程

  • 编写dockerfile脚本
  • 使用dockerfile指令构建

1 . 在宿主机中创建一个空的文件夹 course06 :   mkdir course06
2. cd course06
3. touch dockerfile
4. 使用ls指令就会看到course06 出现dockerfile
5. vim dockerfile 编辑dockerfile
6. FROM nginx
   RUN echo '这是一个本地构建的nginx镜像' > /usr/share/nginx/html/index.html
   复制进入dockerfile
7. :wq保存退出
8. 使用docker build -t nginx:v3 . 运行然后构建镜像.
9. 等待镜像构建完成,使用docker images指令查看新创建的镜像.

 

七.多容器项目

创建⽹络
docker network create todo-app
启动第⼀个容器
在创建的⽹络当中新建⼀个mysql容器
docker run -d \
--network todo-app --network-alias mysql \
-v todo-mysql-data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
-e MYSQL_DATABASE=todos \
mysql:latest
提示 :
您会注意到上⾯命令中命名的卷 todo-mysql-data 安装在 /var/
MySQL 存储其数据的位置。但是,您从未运⾏过 docker volum
Docker 识别出您想要使⽤命名卷并⾃动为您创建⼀个。
验证 mysql是否启动,你要替换 mysql-container-id 为⾃⼰的 id ,id 值就是之前终

启动第⼆个容器
然后在⽹络创建第⼆个容器 .
这个项⽬ nicolaka/netshoot 要从 github 远程拉取
docker run -it --network todo-app nicolaka/netshoot
在第⼆个容器的终端中 ( 终端是⾃动开启的 ) 输⼊ dig mysql 获取
mysql ip

启动第三个容器 

新建一个course07

在启动第三个容器之前 , course07 ⽂件下运⾏命令 :
git clone https://github.com/docker/getting-started-app.git
然后进⼊到 /getting-started-app ⽂件夹中 ,之后的命令在这个⾥⾯运⾏ .
然后在⽹络中创建第三个容器 , 这个容器是 nodejs
docker run -dp 127.0.0.1:3000:3000 \
-it \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=123456 \
-e MYSQL_DB=todos \
node:18-alpine \
sh -c "yarn install && yarn run dev"
docker logs -f 1611bccecdf3
在这个地⽅会出错 , 因为在 yarn install的第四步时,在获取依赖包会⼀直读取 , 这是因为⽹络问题 .
所以我们要重新创建⼀个容器 , 使⽤以下命令 :
在启动之前记得删除原来的容器 , docker rm container-ID

docker run -dp 127.0.0.1:3000:3000 \
-it \
-w /app -v "$(pwd):/app" \
--network todo-app \
-e MYSQL_HOST=mysql \
-e MYSQL_USER=root \
-e MYSQL_PASSWORD=123456 \
-e MYSQL_DB=todos \
node:18-alpine
然后进⼊容器内部终端 :
docker exec -it container-ID /bin/sh

进⼊到项⽬⽂件夹
创建 .yarnrc ⽂件进⾏换源
touch .yarnrc
vi .yarnrc

 

复制以下内容:

registry "https://registry.npm.taobao.org"
sass_binary_site
"https://npm.taobao.org/mirrors/node-sass/"
phantomjs_cdnurl "http://cnpmjs.org/downloads"
electron_mirror
"https://npm.taobao.org/mirrors/electron/"
sqlite3_binary_host_mirror "https://foxgis.osscn-shanghai.aliyuncs.com/"
profiler_binary_host_mirror
"https://npm.taobao.org/mirrors/node-
inspector/"
chromedriver_cdnurl
"https://cdn.npm.taobao.org/dist/chromedriver"
之后在终端输⼊
yarn install
yarn run dev

 

之后进⼊宿主机浏览器 ( 虚拟机 UBUNTU 浏览器 )
输⼊⽹址 localhost:3000
输⼊相关添加项

 查看数据库

之后新建⼀个终端:
docker exec -it <mysql-container-id> mysql -p
todos
在mysql终端输⼊如下指令
select * from todo_items;

八. 使用 Docker Compose

1.创建 Compose 文件

在目录中,创建一个名为 .getting-started-app,compose.yaml

2.定义应用服务

services:
  app:
    image: node:18-alpine
    command: sh -c "yarn install && yarn run dev"
    ports:
      - 127.0.0.1:3000:3000
    working_dir: /app
    volumes:
      - ./:/app
    environment:
      MYSQL_HOST: mysql
      MYSQL_USER: root
      MYSQL_PASSWORD: secret
      MYSQL_DB: todos
  mysql:
    image: mysql:8.0
    volumes:
      - todo-mysql-data:/var/lib/mysql

volumes:
  todo-mysql-data:

运行:

docker compose up -d

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南栀北夏ii

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

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

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

打赏作者

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

抵扣说明:

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

余额充值