avatar

Catalog
Docker的一些简单总结

Docker的一些简单总结

1. Docker的简介

  1. Docker 使用客户端-服务器 (C/S) 架构模式 使用远程API来管理和创建Docker容器。Docker 容器(Container)通过 Docker 镜像(Image)来创建,二者之间的关系类似于面向对象编程中的对象与类

  2. Docker 是一个开源的应用容器引擎

  3. Docker的组成,主要包括三给概念:

    • 仓库(Repository)
    • 镜像(Image)
      1. 它启动很快 。这也意味着,在它执行的过程中几乎没有额外的开销。
      2. 虚拟机占用物理空间大,容器占的内存很小
      3. 一键(单命令)部署。
    • 容器(Container)
  4. 容器和虚拟机的比较:

    • Docker容器很快,启动和停止可以在秒级实现,这相比传统的虚拟机方式要快得多。
    • Docker容器对系统资源需求很少,一台主机上可以同时运行数千个Docker容器。
    • Docker通过类似Git的操作来方便用户获取、分发和更新应用镜像,指令简明,学习成本较低。
    • Docker通过Dockerfile配置文件来支持灵活的自动化创建和部署机制,提高工作效率。

    Docker架构

2. Docker的安装

注意: Docker 要求 Ubuntu 系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本

1. 安装Docker

java
1
yum -y install docker

2. 验证Docker是否安装成功

java
1
使用docker version命令查看,有client和service两部分表示docker安装启动都成功了

3. 启动Docker服务

java
1
2
service docker start   	 启动Docker
systemctl enable docker 设置开机启动

4. 查看Docker的运行状态

java
1
2
3
ps -ef|grep docker
// 或
netstat -lnpe|grep docker

5. 配置容器镜像加速器

每个用户的镜像加速器都不一样,通过阿里云的容器镜像服务的镜像加速器可以找到

java
1
2
3
4
5
6
7
8
9
10
通过修改daemon配置文件/etc/docker/daemon.json来使用加速器
mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://3gecvtyg.mirror.aliyuncs.com"]
}
EOF
systemctl daemon-reload
systemctl restart docker

3. Docker的一些常用命令

1. 查看镜像

java
1
2
3
4
5
docker images   		  列出本地images  
docker images --no-trunc 显示镜像完整信息
docker ps 查看正在运行的容器
docker ps -a 查看所有容器
docker ps -l 查看最近一次运行的容器

2. 搜索镜像

java
1
2
3
4
5
6
7
8
docker search mysql  	    搜索仓库MySQL镜像
docker search --filter=stars=600 mysql 只显示 starts>=600 的镜像
docker search --no-trunc mysql 显示镜像完整 DESCRIPTION 描述
docker pull mysql 下载mysql官方最新镜像
docker pull -a mysql 下载仓库所有mysql镜像
docker pull bitnami/mysql 下载私人仓库镜像
docker rmi mysql 单个镜像删除,(可以通过镜像名或id删除)
docker rmi -f mysql 强制删除(针对基于镜像有运行的容器进程)

3. 容器启动

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
docker run centos echo 'name'	一次性容器:只运行一次
docker run --name NAME -i -t [IMAGE] /bin/bash 交互式容器:命令结束(exit)后即停止
docker restart [-i\] NAME|ID 重启容器
docker stop ID 容器停止
docker rm ID 容器删除
docker rm -f ID 强制删除容器
sudo docker rm $(sudo docker ps -a -q) 删除所有未运行的容器(已经运行的删除不了)

创建守护式容器:无需会话,无需终端,可以长期运行;非常适合运行应用程序和服务
docker run -p 8080:80 -i -t IMAGE
-- run -P -p 端口映射:处理容器内端口和宿主机端口的映射

Ctrl +P Ctrl+Q 命令退出;不需要exit退出

docker top 容器名 查看某一个容器内的进程情况
docker logs -f 0257f0154b97 查看容器日志

进入容器的方法:
docker run -it ID /bin/bash
docker exec -it ID /bin/bash
docker attach 容器名或者容器ID
什么是守护式容器? 
  • 能够长期运行

  • 没有交互式会话

  • 适合运行应用程序和服务

4. 连接MySql

java
1
2
3
4
5
6
7
8
9
10
11
进入docker本地连接mysql客户端
sudo docker exec -it mysql bash
mysql -u username -p password

如果连接不上,可能
1.关闭防火墙
systemctl stop firewalld 关闭防火墙


2.重启MySQL
docker restart ID 重启容器

5. Docker挂载

java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker cp runoob ID:/www/   将主机runoob目录拷贝到容器ID的/www目录下
docker cp ID:/www /tmp/ 将容器ID的/www目录拷贝到主机的/tmp目录中
docker cp /www/runoob ID:/www 将主机/www/runoob目录拷贝到容器ID中,目录重命名为www

有时候 cp 命令比较麻烦!!!
我们通过容器目录挂载,能够轻松实现代码上传,配置文件修改,日志同步等需求

docker run -it -v /宿主机目录:/容器目录 [-v /宿主机目录2:/容器目录2] 镜像ID /bin/bash

例如:

docker run -it -v /home/hData:/home/cData -v /home/hData1:/home/cData1 ID /bin/bash

注意:
docker run -it -v /宿主机目录:/容器目录:ro 镜像名
ro表示read only

例:Tomcat的挂载

  1. 运行Tomcat

    docker run -d –name ‘tom1’ -p 7899:8080 [IMG NAME]

  2. 宿主机在home目录下新建tomcat目录,复制容器里的conf和webapps到宿主机

    • docker cp 容器ID:/usr/local/tomcat/webapps /home/tomcat

    • docker cp 容器ID:/usr/local/tomcat/conf /home/tomcat

    java
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    docker run -d --name 'tom2' -p 80:8080 
    -v /root/llj/tomcat/conf:/usr/local/tomcat/conf
    -v /root/llj/tomcat/webapps:/usr/local/tomcat/webapps
    -v /root/llj/tomcat/logs:/usr/local/tomcat/logs
    tomcat

    如果运行不起来则用这个:
    docker run -d -p 80:8080
    -v /root/llj/tomcat/webapps:/usr/local/tomcat/webapps
    tomcat

4.DockerFile

1. DockerFile 简介:

Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。它们简化了从头到尾的流程并极大的简化了部署工作。Dockerfile从FROM命令开始,紧接着跟随者各种方法,命令和参数。其产出为一个新的可以用于创建容器的镜像。 

指令

2. Docker 构建自己的image 镜像文件

1. 在本地工程中运行生成一个springboot的可运行的jar

  1. 将项目clean一下,在通过install打成jar包

  2. 在本地CMD测试一下是否可访问

    doc下启动服务命令:

    java
    1
    java -jar \路径\firstSpringboot-0.0.1-SNAPSHOT.jar

2. 在/usr/local下创建一个dockerapp的目录

将本地生成的jar文件上传到docker服务器上的这个目录。/usr/local/dockerapp 。在当前的目录下新建一个DockerFile的文件

文件内容如下:

意思是使用的是jdk8,将springbootdemo.jar文件添加到docker容器下,并且名字为firstspringbootdemo.jar,对外声明启动端口是8082,跟我们的application.yml配置文件一样。最后就是执行命令生成

java
1
2
3
4
5
6
7
8
9
10
11
12

###java8环境镜像
FROM java:8

###复制文件到容器, springbootdemo.jar后面要有给空格,要不然会报
ADD springbootdemo.jar /firstspringbootdemo.jar

###声明启动端口号
EXPOSE 8082

###配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/firstspringbootdemo.jar"]

3. 用docker build -t 构建镜像文件

文件名称 . 这个命令构建镜像文件image ,后面那个.表示当前目录。

java
1
docker build -t firstspringbootdemo .

最后显示successfully,则构建成功

4. 查看镜像文件是否生成

java
1
docker images

查看镜像.PNG

5. 启动应用

java
1
2
docker run -p 8082:8082 firstspringbootdemo 
docker run -d -p 8082:8082 firstspringbootdemo 设置服务在后台运行

启动完成.PNG

5. Docker Compose与Harbor(搭建私服)

1. Docker Compose 简介

使用 Docker Compose 可以轻松、高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具

2. Docker Compose 安装

安装的是1.8版本的

java
1
curl -L https://github.com/docker/compose/releases/download/1.8.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

查看是否安装成功

java
1
docker-compose -v

创建成功.PNG

3.Harbor 的安装

  1. 下载tar包

    java
    1
    wget -P /usr/local https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-online-installer-v1.7.1.tgz
  1. 解压tar包

    java
    1
    tar zxf /usr/local/harbor-online-installer-v1.7.1.tgz -C /usr/local/
  1. 预编译harbor (这个过程可能会需要十来分钟,因为要到外部获取各种必须的镜像)

    java
    1
    2
    cd /usr/local/harbor
    ./prepare
  1. 执行安装

    java
    1
    2
    cd /usr/local/harbor
    ./install.sh

    直到看到[✔ —-Harbor has been installed and started successfully.—-]才说明harbor安装成功了

    java
    1
    2
    3
    4
    5
    #停止harbor
    docker-compose -f docker-compose.yml down

    #启动harbor
    docker-compose -f docker-compose.yml up -d
  2. Harbor改配置

    • hostname写上你要访问的harbor的地址当主机名。
    • harbor_admin_password是默认的harbor登录的密码
    • database-password我猜是默认的harbor数据库密码,默认的是root123,建议改掉。
  3. 通过HTTP://ip地址:端口访问Harbor界面

4. 上传镜像

  1. 修改文件 /etc/docker/daemon.json

    java
    1
    2
    3
    4
    5
    6
    {
    "registry-mirrors": ["https://3gecvtyg.mirror.aliyuncs.com"],
    "insecure-registries": [
    "192.168.0.29"
    ]
    }
  1. 然后重启docker

    java
    1
    2
    3
    4
    systemctl restart docker

    cd /usr/local/harbor
    docker-compose up -d
  1. 将要上传的镜像打成tar

    java
    1
    docker tag nginx(镜像名字)  192.168.0.29/topcheer/nginx(放到那个目录)
  1. 登录私有库上传

    java
    1
    2
    docker login -u root -p root
    docker push 192.168.0.29/test 推送到私有库的目录

    推送镜像.PNG


有想法的小伙伴可以进入我的Github查看源码

** 在哪里跌倒,就在哪里趴下,休息一会儿你会发现新大陆的哦~ *

Author: ClodSleep666
Link: https://bugger.top/2020/05/27/1010913/
Copyright Notice: All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.
Donate
  • 微信
    微信
  • 支付寶
    支付寶

Comment