Docker 基础入门与实践

Docker 基础入门与实践

技术杂谈小彩虹2021-07-16 21:44:2290A+A-

核心概念

Docker 镜像

Docker 镜像类似于虚拟机镜像,可以理解为一个只读的模板。镜像是创建Docker容器的基础。

Docker 容器

Docker 容器类似于一个轻量级的沙箱,Docker 利用容器来运行和隔离应用。

容器是从镜像创建的应用运行实例。他可以启动、开始、停止、删除,而这些容器都是彼此相互隔离、互不可见的。

可以把容器看作一个简易版的 Linux 系统环境以及运行在其中的应用程序打包而成的盒子。

Docker 仓库

Docker 仓库类似于代码仓库,是 Docker 集中存放镜像文件的场所。

Docker 安装

Docker 安装

本次以在 CentOs 环境下安装 Docker 为例:

如果安装了旧版本,需要先卸载。旧版本的 Docker 称为 docker 或者 docker-engine ,卸载命令:

$ sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-selinux \ docker-engine-selinux \ docker-engine

为了方便添加软件源,以及支持 devicemapper 存储模式,安装如下软件包:

$ sudo yum update
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2

添加 Docker 稳定版本的 yum 软件源:

$ yum -y install yum-utils #安装yum-config-manager命令
$ sudo yum-config-manager \ --add-repo \ https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo

如果要安装 nightly 或 test 版,执行如下对应的命令:

$ sudo yum-config-manager --enable docker-ce-nightly # 启用nightly, 将--enbale改为disable又可以禁用
$ sudo yum-config-manager --enable docker-ce-test # 启用test

安装最新版本:

$ sudo yum install -y docker-ce

安装指定版本:

$ sudo yum list docker-ce --showduplicates | sort -r # 列出可用版本
$ sudo yum install docker-ce-<VERSION_STRING> # 安装指定版本

最后确认Docker服务启动正常:

$ sudo systemctl start docker #启动docker

如果在 CentOS 中使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

可以添加内核配置参数以启用这些功能。

$ sudo tee -a /etc/sysctl.conf <<-EOF
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可:

$ sudo sysctl -p

卸载 Docker

$ sudo yum remove docker-ce # 卸载docker-ce
$ sudo rm -rf /var/lib/docker # 该目录下的镜像、容器、数据卷、网络等不会自动删除

配置 Docker 服务

更新配置后需要通过systemctl命令来管理Docker服务:

$ sudo systemctl daemon-reload #重新加载配置文件
$ sudo systemctl enable docker #开启开机自动启动
$ sudo systemctl start docker #启动docker

Docker 命令自动补全

# 安装依赖工具bash-complete
yum install -y bash-completion
source /usr/share/bash-completion/completions/docker
source /usr/share/bash-completion/bash_completion

Docker Compose 安装

yum 安装 docker-compose

安装额外依赖包:
yum install -y epel-release
安装 Docker Compose:
yum install -y docker-compose
验证安装:
docker-compose version

pip 安装 docker-compose

安装 pip
yum -y install epel-release
yum -y install python-pip
pip --version
更新 pip
pip install --upgrade pip
安装 docker-compose
pip install docker-compose 
查看 docker compose 的版本
docker-compose version

报错处理

pip 安装时出现【fatal error: Python.h: No such file or directory compilation terminated】错误

因为这些库使用了 c 扩展,需要编译,然后又找不到头文件和静态库导致的。编译这些 c 库需要的依赖库由 python dev 提供,安装 python dev 即可:

For yum (CentOS, RHEL...):

sudo yum install python-devel   # for python2.x installs
sudo yum install python34-devel   # for python3.4 installs

For apt (Ubuntu, Debian...):

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

使用 Docker 镜像

获取镜像 docker pull NAME[:TAG] :

$ docker pull hello-world #获取hello-world镜像
$ docker run hello-world #运行hello-world应用

使用 images 命令列出镜像

使用 docker imagesdocker image ls 命令可以列出本地主机上已有镜像的基本信息。

使用 tag 命令添加镜像标签

使用 docker tag 为本地镜像添加新的标签。

$ docker tag hello-world:latest hello-world:1.0

搜索镜像

使用 docker search 命令搜索官方仓库中的镜像。

删除镜像

使用 docker rmidocker image rm 命令可以删除镜像,支持选项包括:

  • -f, -force:强制删除镜像
  • -no-proune:不要清理未带标签的父镜像
$ docker rmi hello hello-world
$ docker rmi hello hello-world:1.0

清理镜像

使用 docker image prune 命令来清理镜像文件,支持选项包括:

  • -a, -all:删除所有无用镜像,不管是临时镜像
  • -filter:只清理符合给定过滤器的镜像
  • -f, -force:强制删除镜像,而不进行提示

操作 Docker 容器

Docker 容器主要有 create、start、run、wait 和 logs 子命令

查看容器

$ docker ps -a #查看本地所有容器信息

新建容器

使用 docker create 命令来新建一个容器:

$ docker create -it mysql
$ docker ps -a #查看所有容器

启动容器

使用 docker start 命令来启动一个已经创建的容器:

$ docker start af

当用户使用exit命令退出bash进程之后,容器也会自动退出

新建并启动容器

使用 docker run,等价于先执行 docker create 命令,再执行 docker start 命令。

$ docker run -it mysql /bin/bash
$ docker run -d -it mysql /bin/bash #容器在后台以守护态形式运行

查看容器输出

使用 docker logs CONTAINER ID 命令。

$ docker logs 407388f0cc48 #后跟容器ID

暂停容器

使用 docker pause CONTAINER 命令来暂停一个运行中的容器。

$ docker run --name test --rm -it mysql bash
$ docker pause test
$ docker ps

处于 paused 状态的容器,可以通过 docker unpause 命令来恢复运行状态。

终止容器

使用 docker stop 来终止一个运行中的容器。

处于终止状态的容器,可以通过 docker start 命令来启动。

docker restart 命令会将一个运行态的容器先终止,再重新启动。

进入容器

使用 docker attach 可以进入运行在后台的容器,但当多个窗口同时 attach 到一个容器的时候,所有窗口都会同步显示;当某个窗口因命令阻塞时,其他窗口也无法执行其他操作。

使用 docker exec 可以直接再运行中容器内直接执行任意命令:

$ docker exec -it 2342c2352da6 /bin/bash #进入到刚创建的容器中,并启动一个bash

删除容器

使用 docker rm 命令来删除处于终止或退出状态的容器

数据卷

创建数据卷

可以使用 docker volume create 数据卷名称的命令来创建一个数据卷

$ docker volume create volume1

查看数据卷

创建完后,这个数据卷具体对应宿主机哪个文件目录在上面是没法得知的,可以通过 docker volume inspect 数据卷名称来查看

$ docker volume inspect volume1
[
    {
        "CreatedAt": "2019-08-12T19:43:47+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/volume1/_data",
        "Name": "volume1",
        "Options": {},
        "Scope": "local"
    }
]

可以通过 docker volume ls 命令来查看所有数据卷

$ docker volume ls
DRIVER              VOLUME NAME
local               volume1

使用数据卷

可以在启动容器时通过 -v 或 –mount 的方式将一个数据卷挂载到容器的某个目录

$ docker run -dit --name ubuntu1 -v volume1:/vol1 ubuntu:18.04

按照 -v 数据卷名:容器目录 的格式,也可以使用 –mount 按照 --mount source = 数据卷名(主机目录),target = 容器目录的格式,如我们再启动一个挂载相同数据卷的容器 ubuntu2

$ docker run -dit --name ubuntu2 --mount source=volume1,target=/vol2 ubuntu:18.04

删除数据卷

数据卷不会随着容器的删除而自动删除。如果一个数据卷还被某个容器使用,则不能删除;如果一个数据卷只被一个容器使用,则可在删除容器时通过指定 -v 参数同时删除其挂载的数据卷;

$ docker rm -v ubuntu3

可以通过 docker volume rm 数据卷名称 来删除某个数据卷;

可以通过 docker volume prune 清理掉所有未被任何容器使用的数据卷。

创建使用指定卷的容器

有了自定义容器卷,我们可以创建一个使用这个数据卷的容器,这里我们以nginx为例:

# docker run -d -it --name=edc-nginx -p 8800:80 -v edc-nginx-vol:/usr/share/nginx/html nginx #需要前置创建名为edc-nginx-vol的数据卷

其中,-v 代表挂载数据卷,这里使用自定数据卷 edc-nginx-vol,并且将数据卷挂载到 /usr/share/nginx/html (这个目录是 yum 安装 nginx 的默认网页目录)。

如果没有通过 -v 指定,那么 Docker 会默认帮我们创建匿名数据卷进行映射和挂载。

使用卷创建一个容器

# docker run -d -it --name=edc-nginx -v /www/wwwroot:/usr/share/nginx/html nginx

这里指定了将宿主机上的 /www/wwwroot 目录(如果没有会自动创建)挂载到 /usr/share/nginx/html (这个目录是 yum 安装 nginx 的默认网页目录)。

点击这里复制本文地址 以上内容由权冠洲的博客整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

支持Ctrl+Enter提交

联系我们| 本站介绍| 留言建议 | 交换友链 | 域名展示
本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除

权冠洲的博客 © All Rights Reserved.  Copyright quanguanzhou.top All Rights Reserved
苏公网安备 32030302000848号   苏ICP备20033101号-1

联系我们