Docker 学习笔记(一)

0x00 前言

一直使用过docker,但并不是太了解,于是开始学习了解一下

0x01 docker简介

1、什么是容器?

  • 一种虚拟化的方案
  • 操作系统级别的虚拟化
  • 只能运行相同或相似内核的操作系统
  • 依赖于Linux内核特性: Namespace和Cgroups (Control Group)

2、容器技术有哪些优点?
在这里插入图片描述

  • 磁盘占用空间少
  • 提供更多的服务能力和服务更多的用户

3、什么是Docker?
Docker是能将应用程序自动部署到容器的开源引擎。
使用Go语言编写(Go语言开源引擎) 项目地址
基于Apache2.0开源授权协议发行

docker的特别之处:
docker在虚拟化的容器执行环境中增加了一个应用部署引擎。该引擎目标提供一个轻量、快速的环境。
方便从开发者环境->测试环境->生产环境
4、Docker有哪些特点?(Docker的目标)

  • 提供简单轻量的建模方式
  • 职责的逻辑分离
  • 快速高效的开发生命周期
  • 鼓励使用面向服务的架构

5、Docker的使用场景

  1. 使用Docker容器开发、测试、部署服务
  2. 创建隔离的运行环境
  3. 搭建测试环境
  4. 构建多用户的平台即服务(PaaS)基础设施
  5. 提供软件即服务(SaaS)应用程序
  6. 高性能、超大规模的宿主机部署

6、Docker的基本组成

Docker Client 客户端
Docker Daemon 守护进程
Docker Image 镜像
Docker Container 容器
Docker Registry 仓库

1.Docker客户端/守护进程:
(1)C/S架构
(2)本地/远程
2.Docker Image 镜像:
(1)容器的基石
(2)层叠的只读文件系统
(3)联合加载(union mount)
在这里插入图片描述
3.Docker Container 容器:
(1)通过镜像启动
(2)启动和执行阶段
启动时,在镜像的最顶层加载一个读写文件系统(可写层)
(3)写时复制
4.Docker Registry 仓库:
(1)公有:Docker Hub
(2)私有:可自己架设

0x02 安装docker

1、验证是否安装curl

验证是否安装了curl

which curl

如果没有安装则进行安装

sudo apt-get update
sudo apt-get install curl

2、使用官方脚本自动安装docker

curl -fsSL https://get.docker.com/ubuntu/|sudo sh
或curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

3、通过版本库安装docker

1.在Ubuntu中建立ce存储库
(1)更新apt资源包

sudo apt-get update

(2)安装软件包以允许apt通过HTTPS使用存储库

sudo apt-get install apt-transport-https ca-certificates curl software-properties-common

(3)添加Docker的官方GPG密钥

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

可使用以下命令进行验证秘钥指纹 9DC8 5822 9FC7 DD38 854A E2D8 8D81 803C 0EBF CD88

sudo apt-key fingerprint 0EBFCD88

(4)可选设定稳定存储库,可不设置,则自动使用(deb [arch=amd64] https://download.docker.com/linux/ubuntu xenial stable)

sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu  xenial  stable"

2.安装docker-ce并配置docker
(1)更新apt资源包,并进行安装docker-ce

sudo apt-get update
sudo apt-get -y install docker-ce

:如果需要安装特定版本,则使用以下命令获取可用的版本号,使用要安装的版本号进行安装

apt-cache madison docker-ce
sudo apt-get install -y docker-ce=<VERSION>
例如:docker-ce=18.03.0~ce-0~ubuntu

(2)基础安装完成,可以先进行测试一下是否可用

sudo docker version
sudo docker run hello-world

4、配置与卸载docker

1.配置docker
(1)省略sudo命令(感觉sudo麻烦的,可以执行这一步)
如果执行时不想使用sudo命令,可以进行设置用户组,并将当前用户增加到该组中

sudo groupadd docker
sudo usermod -aG docker $USER
注销一下,再执行以下命令
docker run hello-world

(2)添加阿里云docker加速器和ip修改(不是必须的)

{
    "registry-mirrors": ["https://(yourid).mirror.aliyuncs.com"],
    "bip":"192.168.1.1/24"
}

2.卸载docker
(1)卸载docker-ce

sudo apt-get purge docker-ce

(2)删除镜像、容器、卷

sudo rm -rf /var/lib/docker

0x03 docker容器

1、容器的基本操作

1.启动容器

docker run IMAGE [COMMAND][ARG..]
#IMAGE启动容器所用镜像
#COMMAND和ARG容器启动后运行的命令和参数
如:输出Hello World
root@qwzf:~# docker run ubuntu echo 'Hello World'
Hello World

2.启动交互式容器

docker run -i -t IMAGE /bin/bash
#-i 始终打开标准输入 --interactive=true|false 默认false
#-t 为创建的容器分配一个伪tty终端 --tty=true|false 默认是false
如:
root@qwzf:~# docker run -i -t ubuntu /bin/bash
root@c12aa40c4376:/# 

3.查看容器

docker ps [-a][-l]
#没有参数时,列出正在运行的容器
#-a 列出所有容器
#-l 列出最新创建的容器
查看已经建立起的容器
docker inspect id/容器名

4.自定义容器名

docker run --name=自定义名 -i -t IMAGE /bin/bash

5.重新启动停止的容器

docker start [-i] id/容器名
#-i可以以交互的方式来重新启动

6.删除停止的容器

docker rm id/容器名

2、守护式容器

1.什么是守护式容器

  • 长期运行
  • 没有交互式会话
  • 适合运行应用程序和服务

2.以守护形式运行容器

运行:
docker run -i -t IMAGE /bin/bash
退出交互式bash(这样容器就会在后台运行):
Ctrl+P Ctrl+Q

3.附加到运行中的容器(再次进入容器)

docker attach id/容器名

4.启动守护式容器

docker run -d IMAGE [COMMAND][ARG..]
#-d 启用容器时使用后台的方式执行命令

5.查看容器日志

docker logs [-f][-t][--tail] 容器名
#-f 一直跟踪logs变化并返回结果 --folloes=true|false 默认false
#-t 在返回的结果上加上时间戳 --timestamps=true|false 默认false
#--tail 返回结尾处多少数量的日志 默认--tail="all"
如:显示最新的日志
root@qwzf:~# docker logs -tf --tail 0 容器名

6.查看容器内进程

docker top 容器名

7.在运行中的容器内启动新进程

docker exec [-d][-i][-t] 容器名 [COMMAND][ARG..]
如:
docker exec -i -t c12aa40c4376 /bin/bash
退出:Ctrl+P Ctrl+Q
查看:docker top c12aa40c4376

8.停止守护式容器

docker stop 容器名
#发送一个信号给容器,等待容器的停止
docker kill 容器名
#直接停止容器

0x04 docker镜像

存储位置:/var/lib/docker
查看存储驱动和存储位置:docker info

1、查看和删除镜像

1.列出镜像

docker images [选项] [REPOSITORY]
#-a 显示所有镜像,默认不显示中间层镜像,--all=false 
#-f 显示时的过滤条件,--filter=[]
#--no-trunc 不使用截断的方式显示数据
#-q 只显示镜像的唯一d,--quiet=false

在这里插入图片描述
2.镜像标签和仓库
(1)镜像的仓库 REPOSITORY
REPOSITORY 仓库:一系列镜像的集合
REGISTRY 仓库:docker镜像的存储服务
(2)镜像标签 TAG
不同镜像以标签进行区分
仓库名+标签名->镜像名 对应一个镜像的id

ubuntu:14.04
ubuntu:latest 默认

3.查看镜像

docker inspect [OPTIONS] CONTAINER|IMAGE [CONTAINER|IMAGE...]
#-f,--format=""
如:docker inspet ubuntu:14.04

4.删除镜像

docker rmi [OPTIONS] IMAGE [IMAGE...]
#-f 强制删除镜像
#--no-prune 保留被打标签的父镜像
如:
删除单个:docker rmi 镜像id
删除多个:docker ubuntu:12.04 ubuntu:14.04
删除对应的所有镜像:
docker rmi $(docker images -q ubuntu)

2、获取和推送镜像

1.查找镜像
(1)Docker Hub
(2)docker search [OPTIONS] TERM

–automated 自动化,只会显示自动化构建的镜像
–no-trunc 不使用截断的方式显示数据
-s,–stars=0 限制显示的最低星级

docker search -s 3 ubuntu

2.拉取镜像

docker pull [OPTIONS] NAME [:TAG]
#-a 匹配并下载所有标记的镜像
如:docker pull ubuntu:14.04

3.推送镜像

docker push NAME[:TAG]

3、构建镜像

  • 保存对容器的修改,并再次使用
  • 自定义镜像的能力
  • 以软件的形式打包并分发服务及其运行环境
docker commit 通过容器构建
docker build 通过Dockerfile文件构建

1.使用commit构建镜像

docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]
#-a 指定镜像作者
#-m 记录镜像构建信息
#-p 不暂停正在运行的容器
如:
docker commit -a 'qwzf' -m 'nginx' 容器名 qwzf/test1(qwzf/test1 可以随便填)

2.使用Dockerfile构建镜像
Dockerfile文件:包含一切命令的文本文件
(1)创建Dockerfile

#First Dockerfile
FROM ubuntu:14.04
MAINTAINER qwzf "注册邮箱"
RUN apt-get update
RUN apt-get install -y nginx
EXPOSE 80

(2)适用docker build 命令

docker build [OPTIONS] PATH |URL|-
#--force-rm
#--no-cache
#--pull
#-q
#--rm=true
#-t,tags="" 指定构建出镜像的名字
如:docker build -t='qwzf/test2'

每执行一步返回唯一id,即中间层镜像

0x05 docker的一些安装

1、安装LAMP

可能用到的命令

#拉取镜像
docker pull tutum/lamp
#查看镜像
docker images
#启动容器并绑定端口
docker run -d -p 8080:80 -p 3306:3306 -v /var/www/app/:/var/www/html tutum/lamp
#查看运行的容器
docker ps
docker ps -a
#进入正在运行的容器
docker exec -it 'id/name' /bin/bash  
#退出容器
exit
#开启、重启、停止容器
docker start 'id/name'
docker restart 'id/name'
docker stop 'id/name'

具体安装过程如下:
1.查询镜像

root@qwzf:~# docker search lamp
NAME                          DESCRIPTION                                     STARS               OFFICIAL            AUTOMATED
linode/lamp                   LAMP on Ubuntu 14.04.1 LTS Container            179                                     
mattrayner/lamp               A simple LAMP docker image running the prere…   170                                     [OK]
tutum/lamp                    Out-of-the-box LAMP image (PHP+MySQL)           132                                     
greyltc/lamp                  a super secure, up-to-date and lightweight L…   99                                      [OK]
fauria/lamp                   Modern, developer friendly LAMP stack. Inclu…   79                                      [OK]

2.拉取镜像

docker pull tutum/lamp

3.启动守护式容器并端口映射和挂载目录

root@qwzf:~# docker run --name=lamp -d -p 8080:80 -p 3306:3306 -v /var/www/app/lamp/:/var/www/html tutum/lamp
#8080 宿主机端口 80 docker端口
#/var/www/app/lamp/ 宿主机要挂载的目录
#/var/www/html docker上被挂载的位置

在这里插入图片描述

2、安装LNMP

1.查询镜像

docker search lnmp

2.拉取镜像

docker pull winstonpro/lnmp

3.启动守护式容器并端口映射和挂载目录

root@qwzf:~# docker run --name=lnmp -d -p 8000:80 -p 3000:3306 -v /var/www/app/lnmp/:/usr/share/nginx/html winstonpro/lnmp

在这里插入图片描述

3、安装vim

方式一:默认源安装
执行apt-get update更新源

root@dc3d333fc181:~# apt-get update

更新完过后我们就可以安装了vim了

root@dc3d333fc181:~# apt-get install vim

以上的方式虽然可以实现安装vim,但是速度很慢。下面是更快的方式
方式二:aliyun源安装
因为没有vi,vim编辑工具,我这里使用sed命令进行编辑文件内容。
首先查看默认源地址:

root@dc3d333fc181:~# cat /etc/apt/sources.list
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster main
deb http://deb.debian.org/debian buster main
# deb http://snapshot.debian.org/archive/debian-security/20200130T000000Z buster/updates main
deb http://security.debian.org/debian-security buster/updates main
# deb http://snapshot.debian.org/archive/debian/20200130T000000Z buster-updates main
deb http://deb.debian.org/debian buster-updates main

从上面的输出内容我们可以看出,默认会从deb.debian.org去更新源信息。我们将其替换为aliyun的源地址:

root@dc3d333fc181:~# sed -i s@/deb.debian.org/@/mirrors.aliyun.com/@g /etc/apt/sources.list

替换完源后我们就可以安装vim了

root@dc3d333fc181:~# apt-get clean
root@dc3d333fc181:~# apt-get update
root@dc3d333fc181:~# apt-get install vim

0x06 后记

暂时就先学这么多吧!本次学习Docker我学习了docker的安装、docker容器和docker镜像的一些操作,以及简单的端口映射和目录挂载。同时也学习了LAMP和LNMP环境的使用docker进行自动化安装。总的来说,收获很大,继续努力!!!

发布了59 篇原创文章 · 获赞 29 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43625917/article/details/104272473