Docker容器技术入门

一、Dcoker简介

1.1 Docker历史

  • Docker起源于2013年
  • Docker是一个开源的应用容器引擎,基于Go语言开发,Dcoker可以让开发者打包他们的应用以及依赖包到一个轻量级,可移植的容器中,然后发布到任何流行的系统。

1.2 Docker优点

  • Docker可以用来快速交付应用。加快打包时间,加快测试,加快发布,缩短开发及运行代码之间的周期。
  • 复杂环境管理,应用隔离:不同软件运行环境兼容依赖问题,开发环境/测试环境/线上环境保持一致。
  • 轻量级:对于系统内核来说,一个docker只是一个进程,一个系统可以运行上千个容器。
    在这里插入图片描述

1.3 Docker与虚拟机的区别

  • 容器与容器之间只是进程得隔离,而虚拟机是完全的资源隔离。
  • 虚拟机的启动可能需要分钟级别,Dcoker启动是秒级或者更短。
  • 容易使用宿主操作系统的内核,而虚拟机使用完全独立的内核。
    在这里插入图片描述

1.4 Docker架构

在这里插入图片描述

1.5 概念

  • Docker镜像:Dcoker Images,每一个镜像都可能依赖一个或多个下层的镜像组成得另一个镜像,AUFS文件系统。
  • Docker仓库:Docker Registry,集中存放镜像的地方。
  • Docker容器:Dcoker Containers,镜像运行后的进程。

二、Docker安装与配置

2.1 Window 10

  • 下载地址:https://www.docker.com/products/docker-desktop
  • 系统要求:不支持window 10家庭版操作系统
  • 使用下载的exe文件一路安装即可
    在这里插入图片描述

2.2 macOS

  • 下载地址:https://www.docker.com/products/docker-desktop

2.3 Linux

2.3.1 Centos

# 安装依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

在这里插入图片描述

# 添加源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

在这里插入图片描述

# 安装
yum -y install docker-ce

在这里插入图片描述

2.3.2 Ubuntu

  • 安装依赖:sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common
    在这里插入图片描述

  • 安装证书:curl -fsSL https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
    在这里插入图片描述

  • 添加源:sudo add-apt-repository "deb [arch=amd64] https://mirrors.ustc.edu.cn/docker-ce/linux/ubuntu/ $(lsb_release -cs) stable"
    在这里插入图片描述

  • 安装Docker apt -y install docker-ce
    在这里插入图片描述

2.4 阿里云镜像加速器

  • 先注册一个阿里云账号,登录阿里云的镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instances

  • 获取阿里云的加速器地址
    在这里插入图片描述

  • 配置镜像加速器

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

三、docker常用命令

3.1 基本命令

# docker版本信息
docker version

在这里插入图片描述

# docker系统信息
docker info

在这里插入图片描述

问题1: 如果使用命令docker info遇到如下错误:Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
在这里插入图片描述
解决方法:

  1. 首先确定docker是否正确安装
  2. 如果已经正确安装,则是docker没有正常启动,所以在相应的/var/run/ 路径下找不到docker的进程。
  3. 执行如下命令:service docker start ,启动docker服务即可。
    在这里插入图片描述

问题1: 如果使用命令docker info遇到如下错误:ERROR: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Get "http://%2Fvar%2Frun%2Fdocker.sock/v1.24/info": dial unix /var/run/docker.sock: connect: permission denied
在这里插入图片描述
解决方法:
- 先给当前 USER 添加到 docker group。

sudo groupadd docker
sudo gpasswd -a $USER docker
newgrp docker
docker ps
  • 最后试试 docker ps 执行成功就说明权限可以了。

在这里插入图片描述

3.2 镜像管理

# 查看所有镜像
docker images
# 搜索镜像
docker search [镜像名称]
# 拉取下载
docker pull [镜像名称]:latest
docker pull [镜像名称]:[指定版本号]

# 导出
docker save [镜像名称:版本号]>[镜像名称:版本号].tar
# 导入
docker load<镜像名称].tar
# 删除
docker rmi [镜像名称]:latest
docker rmi [镜像名称]:[指定版本号]
docker rmi [镜像ID]
# 更改镜像名
docker tag [镜像名称]:[版本名称] [新镜像名称]:[版本名称]
# 查看镜像创建历史
docker history [镜像名称]

3.3 容器管理

# 运行容器
docker run [镜像名称]
# -d表示后台运行
docker run -d --name=[指定名称] [镜像名称]:[版本名称] ping [IP]
# 查看运行的容器
docker ps
docker ps -a
# 查看容器中运行的进程
docker top [容器名称]
docker top [容器ID]
# 查看资源占用
docker stats [容器名称]
# 启动容器
docker start [容器名称]
# 重启容器
docker restart [容器名称]
# 停止容器
docker stop [容器名称]
# 杀掉容器进程
docker kill [容器名称]
# 暂停容器
docker pause [容器名称]
# 取消暂停容器
docker unpause[容器名称]
# 强制删除容器
docker rm -f [容器名称]
# 执行命令
# -i 交互式
# -t 终端
docker exec -it [容器名称] ls
# 复制文件
docker cp [容器名称]:/etc/hosts [复制的目的路径]
# 查看容器日志
docker logs -f [容器名称]
# 查看容器/镜像的元信息
docker inspect [容器名称]
# 格式化输出
docker inspect -f '{{.id}}' [容器名称]
docker inspect -f '{{.Created}}' [容器名称]
# 更多inspect语法参考:https://www.runoob.com/docker/docker-inspect-command.html
# 查看容器内文件结构
docker diff [容器名称]

四、搭建Web服务器Nginx

4.1 Nginx 简介

Nginx(发音同 engine x)是一个异步的Web服务器,主要提供Web服务、反向代理,负载均衡和HTTP缓存功能。由Igor Sysoev创建于2004年,使用C语言开发。

4.2 运行Nginx容器

  • 拉取容器
# 拉取
docker pull nginx:1.17.9

在这里插入图片描述

  • 运行容器
# 运行
docker -p [启动端口]:[nginx映射端口,默认是80] [容器名称]:[版本名称]
docker -p 88:80 nginx:1.17.9

在这里插入图片描述

# 运行
docker run -d --name [容器名称] -p [启动端口]:[nginx映射端口,默认是80] [容器名称]:[版本名称]
docker run -d --name test -p 88:80 nginx:1.17.9

在这里插入图片描述

  • 挂载目录运行
# 挂载目录
docker run -d --name [容器名称]-p [启动端口]:[nginx映射端口,默认是80] -v [指定目录]:[指定目录] [容器名称]:[版本名称]
docker run -d --name nginx -p 88:80 -v ${PWD}/html:/usr/share/nginx/html nginx:1.17.9

在这里插入图片描述

五、搭建测试用例管理平台TestLink

5.1 TestLink简介

TestLink是基于WEB的测试用例管理系统,主要功能是:测试项目管理、产品需求管理、测试用例管理、测试计划管理、测试用例的创建、管理和执行,并且还提供了统计功能。

5.2 部署数据库

5.2.1 安装容器网络

# 容器网络
docker network create testlink
# 查看所有的容器网络
docker network ls

在这里插入图片描述

5.2.2 运行数据库

# 运行数据库
docker run -d --name mariadb -e MARIADB_ROOT_PASSWORD=mariadb -e MARIADB_USER=bn_testlink -e MARIADB_PASSWORD=bn_testlink -e MARIADB_DATABASE=bitnami_testlink --net testlink -v ${PWD}/mariadb:/bitnami bitnami/mariadb:10.3.22

参数说明:
-d:后台运行
–name:设置别名
-e:设置参数
-e MARIADB_ROOT_PASSWORD=mariadb:设置管理员密码
-e MARIADB_USER=bn_testlink:创建一个用户
-e MARIADB_PASSWORD=bn_testlink:用户密码
-e MARIADB_DATABASE=bitnami_testlink:新建数据库
–net testlink:指定网络
-v ${PWD}/mariadb:/bitnami bitnami/mariadb:10.3.22:挂载当前目录
bitnami/mariadb:10.3.22:镜像名字

在这里插入图片描述
问题

这里遇到了一个运行,使用命令docker ps -a 查看容器mariadb是否正常运行时,容器不是运行状态。
在这里插入图片描述
解决办法:

  1. 通过日志查找原因。
    原因在于:mkdir: cannot create directory '/bitnami/mariadb': Permission denied
# 查看mariabd日志查找原因
docker logs -f mariadb

在这里插入图片描述

  1. 在当前目录下给/bitnami/mariadb添加权限
# 给目录赋予权限
chmod 777 mariadb/

在这里插入图片描述

  1. 重新启动mariadb
docker start mariadb

在这里插入图片描述

5.3 部署TestLink

docker run -d -p 8089:8080 -p 443:443 --name testlink -e TESTLINK_DATABASE_USER=bn_testlink -e TESTLINK_DATABASE_PASSWORD=bn_testlink -e TESTLINK_DATABASE_NAME=bitnami_testlink --net testlink -v ${PWD}/testlink:/bitnami bitnami/testlink:1.9.20

参数说明
-p 8089:8080:http协议端口
-p 443:443:https协议端口
–name testlink :设置别名
-e:设置参数
-e TESTLINK_DATABASE_USER=bn_testlink:传入数据库用户
-e TESTLINK_DATABASE_PASSWORD=bn_testlink:传入数据库密码
-e TESTLINK_DATABASE_NAME=bitnami_testlink:传入数据库名
–net testlink:指定testlink网络和数据库在一个网络下
-v ${PWD}/testlink:/bitnami :挂载当前目录
bitnami/testlink:1.9.20:镜像的版本信息和名字
![在这里插入图片描述](https://img-blog.csdnimg.cn/6e8a6c615cd5493e9f0aba27c66a5251.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAZmxvcmFjaHk=,size_20,color_FFFFFF,t_70,g_se,x_16在这里插入图片描述

问题
这里遇到了一个运行,使用命令docker ps -a 查看容器testlink是否正常运行时,容器不是运行状态。
在这里插入图片描述
解决办法:

  1. 通过日志查找原因。
    原因在于:mkdir: cannot create directory '/bitnami/testlink': Permission denied
# 查看mariabd日志查找原因
docker logs -f testlink

在这里插入图片描述

  1. 在当前目录下给/bitnami/mariadb添加权限
# 给目录赋予权限
chmod 777 testlink/

在这里插入图片描述

  1. 重新启动testlink
docker start testlink

在这里插入图片描述

5.4 使用testlink

  1. 打开浏览器,输入本机IP地址(如:http://127.0.0.1:8089),进入testlink登录页面。
    在这里插入图片描述

  2. 输入用户名和密码,testlink默认用户名是:user 默认密码是:bitnami,点击登录按钮。登录后即可进行操作。
    在这里插入图片描述

六、搭建持续集成平台Jenkins

6.1 Jenkins简介

Jenkins是开源CI&CD软件领导者,提供持续集成和持续交付服务,有超过1000个插件来支持构建、部署、自动化,满足任何项目的需要。

6.2 部署Jenkins

Docker hub: https://hub.docker.com/r/jenkins/jenkins/
在这里插入图片描述

6.2.1 运行Jenkins (方式一)

# 运行(方式一)
docker run -d --name=jenkins -p 8087:8080 jenkins/jenkins

参数说明:
-d //启动在后台
–name //容器名字
-p //端口映射(8081:宿主主机端口,8080:容器内部端口)

问题
这里运行遇到了一个错误“docker: Error response from daemon: Get “https://registry-1.docker.io/v2/”: dial tcp: lookup registry-1.docker.io on 172.16.2.53: server misbehaving.”
在这里插入图片描述
解决办法:
出现这个问题是dns服务器的错误,把服务器改成8.8.8.8或者114.114.114.114即可。

# 在文件中加上DNS
vim /etc/sysconfig/network-scripts/ifcfg-lo
# 注意:如果没有找到ifcfg-lo这个文件,可以看下当前目录下其他ifcfg-开头的文件,查看一下内容,分辨一下是加在哪个文件里面。
# 重启网络
systemctl restart network

在这里插入图片描述

大功告成了!
在这里插入图片描述

Jenkins已经成功启动。
在这里插入图片描述

6.2.2 运行Jenkins(方式二)

# 挂载目录
# 运行 (方式二)
docker run --name jenkins -d -p 8087:8080 -v /data/jenkins:/var/jenkins_home jenkins/jenkins:lts
chmod 777 /data/jenkins_home

参数说明:
-d //启动在后台
–name //容器名字
-p //端口映射(8081:宿主主机端口-可自定义,8080:容器内部端口-不可自定义)
-v //数据卷挂载映射(/data/jenkins_home:宿主主机目录,另外一个即是容器目录)
Jenkins/jenkins:lts //Jenkins镜像(最新版)
在这里插入图片描述
查看Jenkins是否访问成功,发现并没有。
在这里插入图片描述

通过查看Jenkins日志定位一下问题,发现是权限问题。
在这里插入图片描述
给/data/jenkins_home赋予权限。
在这里插入图片描述
Jenkins启动成功。
在这里插入图片描述

6.2.3 访问Jenkins

问题
这里遇到了一个问题。由于上面我重启了网络。systemctl restart network,导致Docker daemon服务自动设置的临时启用IP_FORWARD配置失效,因此我运行了Jenkins,但是无法访问成功。

解决办法
解决方法思路来源于:https://blog.csdn.net/shadow_zed/article/details/103929823。

# 查看当前系统的IP_FORWARD是否启用
sysctl net.ipv4.ip_forward
# 启用当前系统的IP_FORWARD
echo 'net.ipv4.ip_forward=1' >>/usr/lib/sysctl.d/50-default.conf
# 重启服务器或使用下面的命令从文件中加载配置
sysctl -p /usr/lib/sysctl.d/50-default.conf

在这里插入图片描述

Jenkins启动成功。打开浏览器,输入本机IP地址(如:http://127.0.0.1:8086),进入Jenkins登录页面。

在这里插入图片描述

6.2.4 查看默认密码

# 查看默认密码
docker exec -it jenkins cat /var/jenkins_home/secrets/initialAdminPassword

在这里插入图片描述

6.3 进入jenkins_home安装目录

格式:docker exec -it {容器名称} bash

七、Docker-compose使用

7.1 Docker-compose简介

Docker-compose是用于定义和运行多容器的Dcoker应用程序的工具。通过Compose,可以使用YAML文件来配置应用程序的服务。
Compose的使用一般分为三步:

  • 使用Dockerfile定义应用程序的环境,以便可以在任何地方复制它。
  • 在docker-compose.yml中定义组成应用程序的服务,以便它们可以在隔离环境中一起运行。
  • 运行docker-compose up,然后Compose启动并运行您的整个应用程序。

官方文档:https://docs.docker.com/compose/

7.2 Docker-compose安装

macOS,windows系统使用Dcoker Desktop默认已经安装。

Linux系统:
- https://github.com/docker/compose/releases/

# 下载服务文件
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
# 下载的文件会输出到 /usr/local/bin/docker-compose

# 授予权限
sudo chmod +x /usr/local/bin/docker-compose

# 检查是否安装成功
docker-compose version

在这里插入图片描述

7.3 Dcoker-compose常用命令

查看配置:docker-compose config
后台启动:docker-compose up -d
构建镜像:docker-compose build
下载镜像:docker-compose pull
运行的:docker-compose ps
进程:docker-compose top
启动:docker-compose start
停止:docker-compose stop

7.4 Docker-compose演示

通过一个Python web小实例来演示Docker-compose的功能。
暂略,待补充。

八、Docker registry介绍

8.1 简介

地址:https://hub.docker.com/_/registry
Dcoker registry是存储Dcoker image的仓库,运行push,pull,search时,是通过Dcoker daemon与docker registry通信。有时候会用Dcoker Hub这样的公共仓库可能不方便,我们可以通过registry创建一个本地仓库。

8.2 运行

docker run -d -p 5000:5000 -v ${PWD}/registry:/var/lib/registry --restart always --name registry registry:2.7.1

运行成功后,访问:http://服务器ip:5000/v2/_catalog,如:http://182.61.19.183:5000/v2/_catalog,可以查看到我们有一个空的仓库。
http://182.61.19.183:5000/v2/_catalog

8.3 使用

# 检查服务器版本
cat /etc/redhat-release  # CentOS Linux release 7.9.2009 (Core)
# 进入docker安装目录
cd /etc/docker
# 编辑daemon.json(不存在则新建)
vim daemon.json
"""
内容如下
{
        "insecure-registries":["182.61.19.183:5000"]
}
"""
# 重启docker使得配置生效
systemctl restart docker
# 将镜像推送到本地仓库
docker push nginx:1.17.9
# 从本地仓库下载镜像
docker pull nginx:1.17.9

九、Dockerfile语法和指令

9.1 简介

Dockerfile是由一系列指令和参数构成的脚本,一个Dockerfile里面包含了构建整个镜像的完整命令。通过docker build执行Dockerfile中一系列指令自动构建镜像。

9.2 常用指令

  • FROM:基础镜像,FROM领了必须是Dockerfile的首个命令。
  • LABEL:为镜像生成元数据标签信息。
  • USER:指定运行容器的用户名或UID,后续RUN也会使用指定用户。
  • RUN:RUN命令是Dockerfile执行命令的核心部分。它接受命令作为参数并用户创建镜像。每条RUN命令在当前基础镜像上执行,并且会提交一个新镜像层。
  • WORKDIR:设置CMD指明的命令的运行目录。为后续RUN,CMD,ENTRYPOINT,ADD指令配置工作目录。
  • ENV:容器启动的环境变量。
  • ARG:构建环境的环境变量。
  • COPY:复制文件。
  • CMD:容器运行时执行的默认命令。
  • ENTRYPOINT:指定容器的“入口”。
  • HEALTHCHECK:容器健康状态检查。

9.3 演示

使用Dockerfile构建一个Nginx容器,添加容器健康检查。

暂略,待补充。

十、docker镜像构成

10.1 简介

在日常的工作中,尝尝需要制作自己项目的镜像,一般通过以下两种方式制作镜像:Docker commit、Dockerfile。

10.2 Docker commit命令

Dcoker commit一般用作从一个运行状态的容器来创建一个新的镜像。定制镜像应该使用Dcokerfile来完成。默认commit镜像,对外不可解释,不方便排查问题,可维护性差。

docker commit 容器名 新镜像名:tag

10.3 Docker build命令

使用Dcokerfile的方式。

# 忽略文件
dockerignore
# 指定文件
docker build -f
# 添加标签
docker build -t
# 不使用缓存
docker build -no-cache
# 构建时变量
docker build --build-arg
	# ARG指定变量

10.4 演示

暂略,待补充。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值