Docker

概念

Docker 是基于Go语言实现的开源容器项目。期望达到使项目运行环境“一次封装,到处运行的目的”。
Docker:面向内核、软件,docker是秒级别的
虚拟机:面向硬件的,分钟级别

1.Docker daemon*Docker守护进程): 是一个运行在宿主机的后台进程。让Docker客户端与Docker通信
2.Client (Docker客户端): 是Docker的用户界面,它可以接受用户命令和配置标识,并与Docker daemon通信。
3.Images(Docker镜像): 类似于运行软件所在文件夹,在Docker中根据Images创建容器。
4.Container(容器): 类似于运行中的软件,容器是镜像的可运行实例。容器就相当于VMware中每一个克隆出来的虚拟机。
5.Registry(仓库): 存放镜像的仓库.

Docker-linux-helloworld

Docker有windows和linux版本。以安装在Linux上进行演示的。 以下安装步骤基于CentOS stream 8,并确保该虚拟机可以连接外网。
1.下载docker-ce repo
​ 为本地yum提供远程repo信息

curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

2.安装依赖

yum install -y  https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

3.安装docker-ce

yum install -y docker-ce
启动docker服务
systemctl start docker

设置开机自启
systemctl enable docker

查看docker状态
docker info	

4.配置国内镜像仓库

创建文件夹
mkdir -p /etc/docker
编写配置文件
tee /etc/docker/daemon.json <<-'EOF'

加上如下内容:(4行)
{ 
"registry-mirrors": ["https://xbyx1r45.mirror.aliyuncs.com"] 
} 
EOF
重新加载配置文件
systemctl daemon-reload
重启docker服务
systemctl  restart docker

输入: docker info
配置成功如下:
在这里插入图片描述

docker镜像操作

1.查看本地所有镜像: docker images
在这里插入图片描述
REPOSITORY: 镜像所在的仓库名称
TAG: 镜像版本号
IMAGE ID: 镜像ID
CREATED: 镜像的创建日期(不是获取该镜像的日期)
SIZE: 镜像大小(MB)

2.在配置的镜像仓库搜索镜像
NAME: 仓库名称
DESCRIPTION: 镜像描述
STARS: 镜像的受欢迎程度
OFFICIAL: 是否官方
AUTOMATED: 自动构建,表示该镜像由Docker Hub自动构建流程创建的

3.拉取镜像
从远程Registry中下载镜像到本地

docker pull 镜像名称:tag(版本号)

其中:tag可以省略,省略时下载镜像最新版本(lastest)

4.删除镜像

docker rmi 镜像id

docker rmi 镜像id:版本号

容器操作

1.创建容器
每一个创建容器的命令和参数不一样,具体可以查看官网https://hub.docker.com/

docker create [options] 镜像名字或者ID [COMMAND] [ARG...]

例如mysql

docker run --name 容器名称(随意) -p 外部访问端口:docker内部端口 -e MYSQL_ROOT_PASSWORD=设置密码 -d mysql的镜像名称:镜像版本号

2.创建并启动容器
注意是run不是create

此容器开机自启:
–reset always

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7 

参数解释:

–name给容器起一个新名字。为容器指定一个名称
-i以交互模式运行容器,通常与-t连用
-t为容器重新分配一个伪终端,通常与-i连用
-P随机端口映射
-p指定端口映射,hostPost:containerPort
-e配置信息
-d后台执行
-v主机和容器的目录映射关系,":"前为主机目录,之后为容器目录

–network=host 代表容器中没有网卡,使用宿主机的网卡,容器对外发布的服务端口,直接占用宿主机的等值端口。即容器内部使用什么端口,就等价与占用宿主机的对应端口,故可以省略- p 的端口号设置

3.启动容器

docker start 容器ID
docker start mysql(容器)

启动守护式进程:docker容器后台运行,就必须有一个前台进程。
docker run -it -d images [镜像名称][版本号]/[镜像id]

docker run相当于执行了两步操作:将镜像放入容器中(docker create),然后将容器启动,使之变成运行时容器(docker start)。
而docker start的作用是,重新启动已存在的镜像。也就是说,如果使用这个命令,我们必须事先知道这个容器的ID,或者这个容器的名字,我们可以使用docker ps找到这个容器的信息。**
4.停止容器

docker stop 容器ID
docker stop mysql

5.强制停止容器
不推荐使用,容易造成容器服务不正常关闭,影响后续使用。
docker kill 容器ID
docker kill mysql

6.删除容器
要删除的容器,必须是关闭状态的。
docker rm 容器ID
docker rm mysql

7.查看容器中运行的进程
可以知道容器中到底运行的是哪个应用程序。
docker top 容器ID
docker top mysql

docker container ls 

8.查看docker容器进程信息:

docker ps [options]	
-l显示最近创建的容器
-n 数字显示最近n个创建的容器 -n3
-a列出所有的运行过的容器
-q列出容器id

9.与运行中的容器交互

docker exec -it mysql /bin/bash
docker exec -it mysql bash

-i 以交互模式运行容器,通常与-t连用
-t 为容器重新分配一个伪终端,通常与-i连用

10.查看容器日志
docker logs -f -t --tail 行数 容器ID
docker logs -f -t --tail 5 mysql

–tail 5 显示后5行
-f 事实监听日志
-t 显示记录日志的时间
一般不跟这两个参数
直接写成:
docker logs --tail 5 mysql

11.查看容器内部详情
docker inspect 容器ID
docker inspect mysql

12.复制容器数据到宿主机(复制宿主机数据到容器)
cp 后面,谁在后面表示拷贝到谁里。
docker cp 容器ID:容器内路径 宿主机路径
docker cp 宿主机路径 容器ID:容器内路径
实例:
复制MySQL配置到宿主机
docker cp mysql:/etc/mysql /tmp/conf
复制宿主机文件到MySQL容器
docker cp /tmp/conf/a.txt mysql:/etc/mysql/

自定义镜像

1.下载JDK镜像
一般使用openjdk镜像。
docker search openjdk
docker pull openjdk:8

  1. 使用Maven插件构建镜像
    修改Docker服务配置
    在ExecStart变量末尾,增加下述配置:注意:一定是同一行,且与原值之间必须有至少一个英文半角空格
    vim /usr/lib/systemd/system/docker.service
    -H unix:///var/run/docker.sock -H 0.0.0.0:2375
    在这里插入图片描述
    3.重启docker服务
    systemctl daemon-reload
    systemctl restart docker

4.IDEA项目POM依赖

<plugin>
    <groupId>com.spotify</groupId>
    <artifactId>docker-maven-plugin</artifactId>
    <version>1.2.2</version>
    <configuration>
        <imageName>demo:1.0</imageName>  <!--指定镜像名称 仓库/镜像名:标签-->
        <baseImage>openjdk:8</baseImage> <!--指定基础镜像-->
        <dockerHost>http://192.168.6.100:2375</dockerHost>  <!-- 指定服务器仓库地址 -->
        <entryPoint>["java","-jar","/${project.build.finalName}.jar"]</entryPoint> <!-- 容器启动执行的命令 -->
        <resources>
            <resource>
                <targetPath>/</targetPath> <!-- 指定要复制的目录路径,这里是当前目录 -->
                <directory>${project.build.directory}</directory> <!-- 指定要复制的根目录,这里是target目录 -->
                <include>${project.build.finalName}.jar</include> <!-- 指定需要拷贝的文件,这里指最后生成的jar包 -->
            </resource>
        </resources>
    </configuration>
</plugin>

阿里云镜像仓库

待定…

本地镜像仓库

待定…

Docker的数据管理

1.数据卷管理
数据卷的作用是将宿主机的某个磁盘目录映射到容器的某个目录,从而实现宿主机和容器之间的数据共享。

docker run|create --name [容器名称] -v [宿主机目录]:[容器目录] [镜像名称] 
docker run --name vvv -p 3399:3306 -v /usr/local/vvv:/mydatas -d -e MYSQL_ROOT_PASSWORD=123456  mysql

3.数据卷容器管理
数据卷容器的作用是实现多个容器之间的数据共享。其实,数据卷容器也是一个容器,但是与其他Docker容器不一样的是,数据卷容器是专门用来提供数据卷给其他容器进行挂载操作。
创建数据卷容器
例:
创建两个容器,都指定my_datas为共享容器

第一个容器:
docker run --name c1 --volumes-from my_datas  -e MYSQL_ROOT_PASSWORD=123456 -d  mysql
第二个容器
docker run --name c2 --volumes-from my_datas  -e MYSQL_ROOT_PASSWORD=123456 -d  mysql
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值