Docker 学习笔记

1.入门介绍

1.1  什么是Docker ?

  • 使用最广泛的开源容器引擎
  • 一种操作系统级的虚拟化技术
  • 依赖于Linux 内核特性 : NameSpace 和 Cgroups 
  1. NameSpace 进行资源的隔离
  2. Cgroups 进行资源的限制
  • 一个简单的应用程序打包工具

 1.2. 设计目标 

  • 提供简单的应用程序打包工具
  • 开发人员和运维人员职责逻辑分离
  • 多环境保持一致性

1.3. docker 简介  

Docker Client  : 客户端

Docker Daemo  : 守护进程

Docker Images  : 镜像

Docker Container :容器

Docker Registry :镜像仓库 

                                                      容器 vs 虚拟机

 

                                                                     性能比较

 1.4. 应用场景

  • 应用 程序的打包和发布
  • 应用程序隔离
  • 持续集成
  • 部署微服务
  • 快速搭建测试环境
  • 提供PaaS产品(平台即服务)

 2. Linux 中的 docker 安装

官网 : https://www.docker.com/

2.1 卸载旧版本

sudo apt-get remove docker docker-engine docker.io containerd runc

2.2 使用存储库安装 

   官网安装教程 :https://docs.docker.com/install/linux/docker-ce/ubuntu/

**Step1:安装docker**
   sudo apt-get -y update
   sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

**step 2: 安装GPG证书**
   curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

**Step 3: 写入软件源信息**
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

**Step 4: 更新并安装 Docker-CE**
  sudo apt-get -y update
  sudo apt-get -y install docker-ce
  sudo usermod -a -G docker $USER   //更改用户权限

sudo gpasswd -a ${USER} docker   //将当前用户加入docker 组
  sudo service docker start   //启动docker
  sudo chmod 777 /var/run/docker.sock  //进入root操作</kbd>

**安装指定版本的Docker-CE:**

   Step 1: 查找Docker-CE的版本:
   apt-cache madison docker-ce
   docker-ce | 17.03.1~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
   docker-ce | 17.03.0~ce-0~ubuntu-xenial | http://mirrors.aliyun.com/docker-ce/linux/ubuntu xenial/stable amd64 Packages
 
   Step 2: 安装指定版本的Docker-CE: (VERSION 例如 17.06.2~ce-0~ubuntu-xenial)
   sudo apt-get -y install docker-ce=[VERSION](从上面找一个版本就可以)

   查询版本: docker --version

 2.3 运行helloworld 测试docker

sudo docker run hello-world

2.4 查看docker 的详细信息

docker info

docker version  //查看版本信息

 2.5 创建一个容器(简单示例)

docker run -it nginx                             //启动一个容器

重新打开一个命令行界面。执行下边命令 

docker ps                                             //查看所有的镜像    

docker images                                   // 查看所有的镜像

docker inspect  bfcc4d0a38d1           //通过容器id 查看容器的详细信息,bfcc4d0a38d1是 nginx 的 id  ,在 docker ps 可以看到

curl 172.17.0.3                                     //访问容器
docker exec -it bfcc4d0a38d1 bash  // 进入容器

 3. 镜像管理 

镜像是什么 ?

    ---- 简单来说,docker 镜像是一个不包含 Linux 内核而又精简的 Linux 操作系统。

镜像从哪里来?

    ---- Docker Hub 是由Docker 公司负责维护的公共注册中心,包含大量的公共注册中心,包含大量的容器镜像,Docker 工具默认从这个公共镜像下载镜像。

     ---- https://hub.docker.com/explore

----- 默认为国外的仓库,下载速度较慢,可以手动配置为国内仓库

           ----  $ vi /etc/docker/daemon.json
 

{
  "registry-mirrors": ["https://registry.docker-cn.com"]
}

          ---- 执行命令  sudo systemctl start docker

        ----- 查看是否启动 :systemctl status docker



 

镜像与容器联系 ?

--- 镜像不是一个单一的文件,而是由多层构成,我们可以通过 docker history <ID/NAME> 查看镜像中各层的内容及大小,每层对应着Dockerfile中的一条指令,docker镜像默认存储在 /var/lib/docker/中

 ----- 容器其实是在镜像的最上边加了一层读写层,在运行容器里做任何文件改动,都会写到这个读写层,如果容器删除了,读写层也会删除了。

---- docker 使用存储驱动管理镜像层内容及读写层的容器层。

docker images   //查看所有的镜像
docker history nginx  //查看镜像的分层

存储驱动 :

镜像管理命令:

docker image load < nginx1.tar

 docker image save nginx > nginx1.tar
du -sh

 4. docker 启动与停止 

  •      ----启动  sudo systemctl start docker
  •      ---- 查看是否启动(状态) :systemctl status docker
  •     ---- 停止 :sudo systemctl stop docker
  •     ---- 重启 : sudo systemctl restart docker
  •      ---- 设置开机启动 :sudo systemctl enable docker
  •    ---- 查看docker 的信息 :docker info
  •   ---- 查看docker 的在线官方文档 :docker --help

5. docker 常用命令 

5.1 镜像相关命令

1. 查看镜像

-- docker images   

---- REPOSITORY : 镜像名称  ,TAG :镜像标签  , IMAGE ID :镜像ID , CREATE :镜像的创建日期 , SIZE :镜像大小。

-----这些镜像都存储在 Docker 宿主机的  /var/lib//docker 目录下

2. 搜索镜像

--docker search +镜像名   // docker search nginx   

--- NAME : 仓库名称 , DESCRIPTION : 镜像描述 , STATUS :用户评价,反应一个镜像的受欢迎程度,  OFFICIAL : 是否官方, AUTOMATES : 自动构建,表示该镜像由 docker hub 自动构建流程创建的。

3. 拉取镜像

docker pull +镜像名称   // docker  pull linuxserver/nginx

4.1 删除镜像

docker rmi 镜像ID  //  docker rmi f72695d652a2

4.2 删除所有镜像

docker rmi ` docker images -q`  //注意,这个引号时esc键下边的键表示的符号。

----- dockers images -q  //列出所有镜像的ID。

5.2 容器相关命令

1. 查看容器 

docker ps  (查看运行中的容器)

docker ps -a (查看所有的容器)

docker ps -l (查看最后一次运行的容器)

docker ps -f status=exited (查看停止的容器)

2. 创建与启动容器 

2.1 创建容器命令 docker run 

  -i  : 表示运行容器

  -t  : 表示容器启动后进入命令行,加入这两个参数后,容器创建就能登录进去,即分配一个伪终端。

  --name : 为创建的容器命名。

  -v : 表示目录映射关系,(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个 -v 做多个目录或文件映射, 注意 :最好做目录映射,在宿主机上做修改,然后共享到容器上。

  -d : 在run 后边加上 -d 参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加上 -i -t 两个参数,创建后就会自动进入容器)。

 -p : 表示端口映射,前者是宿主机端口,后者是容器内的映射端口,可以使用多个端口映射

(1) :  交互式方式创建容器 : 退出时容器时,容器结束生命。

docker run -it --name=容器名称  镜像名称:标签 /bin/bash

例如 :docker run -it --name=mynginx nginx:1.12 /bin/bash

退出当前容器 : exit 

(2) : 守护式方式创建容器(不会切换到docker 终端)

docker run -di --name=zdhnginx nginx:1.12 /bin/bash

 如何进入docker 终端 ?

docker exec -it zdhnginx /bin/bash  //docker exec -it 容器名称 /bin/bash

即使 执行 exit 命令 退出,并不会退出docker 容器。

3. 停止与启动容器

(1)停止容器 

docker stop zdhnginx  // docker stop 容器名称(或者容器id)

(2)启动容器 

docker start 容器名称 (或者容器id)

//docker start zdhnginx

4. 文件拷贝 

4.1 将文件拷贝到容器内部,可以使用 cp 命令

docker cp get-docker.sh zdhnginx:home //docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以用容器ID

4.2 也可以将文件从容器中拷出来
 

docker cp zdhnginx:/home/get-docker.sh /home/ubuntu/MyGo/

//docker cp 容器名称:/home/get-docker.sh 主机目录

5. 目录挂载

在创建容器的时候,将宿主机的目录与容器的目录进行映射,这样我们就可以通过修改宿主机的某个目录的文件而去影响容器;

--- 创建容器 添加参数 -v 参数,后边为   宿主机:目录 

 

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=zdh1nginx nginx:1.12

在共享多级目录时,可能出现权限不足问题,  添加 --

6. 查看容器 IP 地址

6.1 通过以下命令查看容器运行的各种数据

docker inspect zdhnginx // docker inspect 容器名称(容器ID),查看容器的详细信息

6.2 执行以下命令直接输出IP 地址

docker inspect --format='{{.NetworkSettings.IPAddress}}' zdh1nginx

7. 删除容器

删除指定容器 :删除容器前必须停止

docker rm zdh1nginx  //docker rm 容器名称(容器ID)

6. 应用部署

6.1 MySql 部署

1. 拉去 MySql 镜像
 

docker pull mysql:5.7


2. 创建容器  

-p : 代表端口映射    -e : 代表添加环境变量 MYSQL_ROOT_PASSWORD 是 root 用户的登录密码。

docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql:5.7(拉取的容器镜像)

3. 进入MySQL容器

docker exec -it tensquare_mysql /bin/bash

4. 登录 MySQL

mysql -u root -p

5. 远程登录,连接宿主机IP,指定端口为 33306

6.2 Tomcat 部署

1. 镜像拉取

docker pull tomcat

2. 创建容器(-v : 目录挂载)

docker run -di --name=mytomcat -p 9000:8000 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat

此时,访问 http://140.143.59.4:9000/  ,显示无法访问该页面,因为我们使用了目录挂载,原来的 root 被清空,需要自己部署应用。

 

6.3 Nginx 部署 

1. 镜像拉取

docker pull nginx

2. 创建 Nginx 容器

docker run -di --name=zdhnginx -p 80:80 nginx

 

 

6.4 Redis 部署

 1. 镜像拉取

docker pull redis

2. 创建容器

 docker run -di --name=zdhredis -p 6379:6379 redis

远程连接redis,通过本地的cmd 命令,进入 redis 安装目录,执行下边命令 redis-cli -h 140.143.59.4

-h : 表示连接远程的redis ,若不加 -h ,则只是连接本地的redis

 7. 备份与迁移 

7.1容器保存为镜像

通过以下命令将容器保存为镜像

docker commit zdhnginx zdhnginx_i 

7.2 镜像备份

sudo docker save -o zdhnginx.tar zdhnginx_i  // zdhnginx.tar 是导出的文件名   ,zdhnginx_i 是要保存的镜像

7.3 镜像恢复与迁移

sudo docker load -i zdhnginx.tar 

8. Dockerfile 

Dockerfile 是由一系列的命令和参数构成的脚本,这些命令应用于基础镜像并创建一个新的镜像。

1. 对于开发人员,可以为开发团队提供要给完全一致的开发环境

2. 对于测试人员,可以直接拿开发时构建的镜像或者通过Dockerfile 文件构建一个新的镜像开始工作;

3. 对于运维人员,在部署时,可以实现应用的无缝移植。

8.1 常用命令 

8.2 使用脚本创建镜像

1. 创建文件目录 

mkdir -p /usr/local/dockerjdk8

2. 将jdk8 的tar包 移动到 dockerjdk8 目录中

sudo mv jdk-8u231-linux-x64.tar.gz /usr/local/dockerjdk8/

3. 进入dockerjdk8 目录

cd /usr/local/dockerjdk8

4.创建 Dockerfile (注意 : D 是大写的,名称必须这样写)

 vi DockerFile
FROM centos:7
MAINTAINER Janson
WORKDIR /usr
RUN mkdir /usr/local/java
ADD jdk-8u231-linux-x64.tar.gz /usr/local/java/

ENV JAVA_HOME=/usr/local/java/jdk-8u231-linux-x64
ENV JRE_HOME=$JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/bin/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH

 

5. 构建镜像

docker build -t='jdk1.8' .  // -t 指定构建镜像的名称  . 指定Dockerfile 所在的文件夹

 

6. docker images 可以查看新构建的镜像 

 

 

9. Docker 私有仓库

9.1 私有仓库的搭建与配置

 1. 拉取私有仓库镜像

docker pull registry

2. 启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

3. 打开浏览器输入地址 http://140.143.59.4:5000/v2/_catalog

4.修改 daemon.json   (若在另一台机器上下载docker镜像,则需执行下边两个步骤,然后docker pull 140.143.59.4:5000/jdk1.8)

sudo vi /etc/docker/daemon.json 

添加以下内容,保存退出 

"insecure-registries" : ["140.143.59.4:5000"]

5. 重启docker

sudo systemctl restart docker

 

9.2 将镜像上传至私有仓库

1. 标记此镜像为私有仓库的镜像

docker tag jdk1.8 140.143.59.4:5000/jdk1.8

2. 启动registry  容器仓库

 docker start registry 


3. 上传标记的镜像

docker push 140.143.59.4:5000/jdk1.8

输入 : http://140.143.59.4:5000/v2/_catalog

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Janson666

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

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

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

打赏作者

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

抵扣说明:

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

余额充值