Linux系统Docker部署及使用方法
Posted 星河皆念你
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux系统Docker部署及使用方法相关的知识,希望对你有一定的参考价值。
众所周知,我是个努力想成为专业运维而又业余的网管。今天是六月的第八天, 上周我们聊了聊Ansible自动化运维工具的部署 ad-hoc以及ansible-playbook剧本使用编写规则。
自动化运维Ansible之Playbook 公众号:星河皆念你
今天我们聊一聊docker容器,docker容器的话可以说是现在最热门的技术之一。包括现在最热门的kubernetes 容器编排服务和prometheus监控服务都是围绕着容器技术来延展开来。
下面我们先了解一下docker容器到底是什么:
1、Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
2、Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
3、容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。
形象的理解就是Docker是一个虚拟环境容器,可以将你的开发环境、代码、配置文件等一并打包到这个容器中,并发布和应用到任意平台中。比如,你在本地用Python开发网站后台,开发测试完成后,就可以将Python3及其依赖包、Flask及其各种插件、mysql、nginx等打包到一个容器中,然后部署到任意你想部署到的环境。
你可以用虚拟化技术的思路来理解 。但又不能把它完全理解成虚拟化技术。因为docker容器是一个进程,只不过利用的是一个叫namespace(名称空间)的技术能隔离宿主机(也就是本机)和容器之间
以下图可以看出docker容器和虚拟化技术的区别
为什么要使用容器技术:
1:快速,一致地交付您的应用程序
Docker 允许开发人员使用您提供的应用程序或服务的本地容器在标准化环境中工作,从而简化了开发的生命周期。
2:响应式部署和扩展
Docker 是基于容器的平台,允许高度可移植的工作负载。Docker 容器可以在开发人员的本机上,数据中心的物理或虚拟机上,云服务上或混合环境中运行。
Docker 的可移植性和轻量级的特性,还可以使您轻松地完成动态管理的工作负担,并根据业务需求指示,实时扩展或拆除应用程序和服务。
3:在同一硬件上运行更多工作负载
虚拟化技术Docker 轻巧快速。它为基于虚拟机管理程序的虚拟机提供了可行、经济、高效的替代方案,因此您可以利用更多的计算能力来实现业务目标。Docker 非常适合于高密度环境以及中小型部署,而您可以用更少的资源做更多的事情。
Docker的三个概念:
1、镜像(Image):类似于虚拟机中的镜像,是一个包含有文件系统的面向Docker引擎的只读模板。任何应用程序运行都需要环境,而镜像就是用来提供这种运行环境的。例如一个Ubuntu镜像就是一个包含Ubuntu操作系统环境的模板,同理在该镜像上装上Apache软件,就可以称为Apache镜像。
2、容器(Container):类似于一个轻量级的沙盒,可以将其看作一个极简的Linux系统环境(包括root权限、进程空间、用户空间和网络空间等),以及运行在其中的应用程序。Docker引擎利用容器来运行、隔离各个应用。容器是镜像创建的应用实例,可以创建、启动、停止、删除容器,各个容器之间是是相互隔离的,互不影响。注意:镜像本身是只读的,容器从镜像启动时,Docker在镜像的上层创建一个可写层,镜像本身不变。
3、 仓库(Repository):类似于代码仓库,这里是镜像仓库,是Docker用来集中存放镜像文件的地方。注意与注册服务器(Registry)的区别:注册服务器是存放仓库的地方,一般会有多个仓库;而仓库是存放镜像的地方,一般每个仓库存放一类镜像,每个镜像利用tag进行区分,比如Ubuntu仓库存放有多个版本(12.04、14.04等)的Ubuntu镜像。
下面我们先看docker容器的部署方法:
docker官网提供了多种系统部署docker容器的方法 其中包括有 linux (centos ubuntu debian 等等)window Mac OS等系统,下面我们就举例使用linux下Centos系统 来部署docker容器服务。因为在生产环境中所使用linux系统的服务器还是占很大一部分的
部署:
1、卸载旧版本:
Docker 版本称为 docker 或 docker-engine 。如果已安装这些程序,请卸载它们以及相关的依赖项。
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装 Docker Engine-Community
Docker Engine-Community 之前,需要设置 Docker 仓库。之后,您可以从仓库安装和更新 Docker。
yum-config-manager ,并且 device mapper 存储驱动程序需要 device-mapper-persistent-data 和 lvm2。
sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
3、使用以下命令来设置稳定的仓库。
sudo yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
Docker Engine-Community
Docker Engine-Community 和 containerd 或者安装特定版本
sudo yum install docker-ce docker-ce-cli containerd.io -y
安装特定版本需查看存储库中可用的版本信息
yum list docker-ce --showduplicates | sort -r
然后在使用
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io
等安装完毕之后先别着急启动 因为默认情况docker安装好
DockerHub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。Docker 官方和国内很多云服务商都提供了国内加速器服务,例如:
//hub-mirror.c.163.com/ :
//<你的ID>.mirror.aliyuncs.com :
//reg-mirror.qiniu.com :
可以输入一下命令来配置加速地址
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
["https://reg-mirror.qiniu.com/"] :
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker
如启动或安装报错,可根据它的错误提示来进行排查
Docker中关于镜像的基本操作
安装完Docker引擎之后,就可以对镜像进行基本的操作了。
我们从官方注册服务器(hub.docker.com)的仓库中pull下CentOS的镜像,前边说过,每个仓库会有多个镜像,用tag标示,如果不加tag,默认使用latest镜像:
[ ]
[ ]
Using default tag: latest
latest: Pulling from library/centos
08d48e6f1cff: Pull complete
Digest: sha256:b2f9d1c0ff5f87a4743104d099a3d561002ac500db1b9bfa02a783a46e0d366c
Status: Downloaded newer image for centos:latest
[ ]
REPOSITORY TAG IMAGE ID CREATED SIZE
centos latest 0584b3d2cf6d 9 days ago 196.5 MB
以上是下载一个已有镜像,此外有两种方法可以帮助你新建自有镜像。
(1)利用镜像启动一个容器后进行修改 ==> 利用commit提交更新后的副本
[root@xxx ~]# docker run -it centos:latest /bin/bash # 启动一个容器
[root@72f1a8a0e394 /]# # 这里命令行形式变了,表示已经进入了一个新环境
[root@72f1a8a0e394 /]# git --version # 此时的容器中没有git
bash: git: command not found
[root@72f1a8a0e394 /]# yum install git # 利用yum安装git
......
[root@72f1a8a0e394 /]# git --version # 此时的容器中已经装有git了
git version 1.8.3.1
此时利用exit退出该容器,然后查看docker中运行的程序(容器):
[root@xxx ~]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
72f1a8a0e394 centos:latest "/bin/bash" 9 minutes ago Exited (0) 3 minutes ago
这里将容器转化为一个镜像,即执行commit操作,完成后可使用docker images查看:
[root@xxx ~]# docker commit -m "centos with git" -a "qixianhu" 72f1a8a0e394 xianhu/centos:git
[root@xxx ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
xianhu/centos git 52166e4475ed 5 seconds ago 358.1 MB
centos latest 0584b3d2cf6d 9 days ago 196.5 MB
其中,-m指定说明信息;-a指定用户信息;72f1a8a0e394代表容器的id;xianhu/centos:git指定目标镜像的用户名、仓库名和 tag 信息。注意这里的用户名xianhu,后边会用到。
此时Docker引擎中就有了我们新建的镜像xianhu/centos:git,此镜像和原有的CentOS镜像区别在于多了个Git工具。此时我们利用新镜像创建的容器,本身就自带git了。
[ ]
[ ]
git version 1.8.3.1
利用exit退出容器。注意此时Docker引擎中就有了两个容器,可使用docker ps -a查看。
第二种方法 是利用dockerfile来创建docker镜像 这里就不过多讲解 将在下篇文章专门讲dockerfile 制作镜像的方法
Docker中关于容器的基本操作
在前边镜像的章节中,我们已经看到了如何基于镜像启动一个容器,即docker run操作。
[ ]
这里-it是两个参数:-i和-t。前者表示打开并保持stdout,后者表示分配一个终端(pseudo-tty)。此时如果使用exit退出,则容器的状态处于Exit,而不是后台运行。如果想让容器一直运行,而不是停止,可以使用快捷键 ctrl+p ctrl+q 退出,此时容器的状态为Up。
除了这两个参数之外,run命令还有很多其他参数。其中比较有用的是-d后台运行:
[ ]
[ ]
这里第二条命令使用了-d参数,使这个容器处于后台运行的状态,不会对当前终端产生任何输出,所有的stdout都输出到log,可以使用docker logs container_name/container_id查看。
启动、停止、重启容器 删除容器命令:
[ ]
[ ]
[ ]
[ ]
当我所使用 docker ps 时 则可以看到 如下:
[ ]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
输出详情介绍:
CONTAINER ID: 容器 ID。
IMAGE: 使用的镜像。
COMMAND: 启动容器时运行的命令。
CREATED: 容器的创建时间。
STATUS: 容器状态。
状态有7种:
created(已创建)
restarting(重启中)
running(运行中)
removing(迁移中)
paused(暂停)
exited(停止)
dead(死亡)
PORTS: 容器的端口信息和使用的连接类型(tcp\udp)。
NAMES: 自动分配的容器名称。
容器使用
获取镜像
比如我这里想启动一个nginx服务,我们可以使用 docker search 命令来查看dockerhub 官网所上传的nginx镜像:
[root@XXX ~]# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 13301 [OK]
jwilder/nginx-proxy Automated Nginx reverse proxy for docker con… 1819 [OK]
richarvey/nginx-php-fpm Container running Nginx + PHP-FPM capable of… 777 [OK]
linuxserver/nginx An Nginx container, brought to you by LinuxS… 114
bitnami/nginx Bitnami nginx Docker Image 84 [OK]
tiangolo/nginx-rtmp Docker image with Nginx using the nginx-rtmp… 75 [OK]
alfg/nginx-rtmp NGINX, nginx-rtmp-module and FFmpeg from sou… 66 [OK]
jc21/nginx-proxy-manager Docker container for managing Nginx proxy ho… 63
nginxdemos/hello NGINX webserver that serves a simple page co… 50 [OK]
jlesage/nginx-proxy-manager Docker container for Nginx Proxy Manager 45 [OK]
nginx/nginx-ingress NGINX Ingress Controller for Kubernetes 33
privatebin/nginx-fpm-alpine PrivateBin running on an Nginx, php-fpm & Al… 25 [OK]
schmunk42/nginx-redirect A very simple container to redirect HTTP tra… 18 [OK]
我们可以看到docker hub所上传有这么多的nginx 镜像,镜像名称 介绍 下载数量 等等
我们就下载即pull 最多的镜像
[root@XXX ~]# docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
afb6ec6fdc1c: Pull complete
dd3ac8106a0b: Pull complete
8de28bdda69b: Pull complete
a2c431ac2669: Pull complete
e070d03fd1b5: Pull complete
Digest: sha256:c870bf53de0357813af37b9500cb1c2ff9fb4c00120d5fe1d75c21591293c34d
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
下载完毕可使用docker images 查看本地镜像是否下载完成
[root@XXX ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 4392e5dad77d 5 days ago 132MB
运行容器
下载完成后,我们可以使用以下命令来运行 nginx 容器:
docker run --name nginx-test -p 8080:80 -dit nginx
参数说明:
--name nginx-test:容器名称。
-p 8080:80:端口进行映射,将本地 8080 端口映射到容器内部的 80 端口。
-d nginx:设置容器在在后台一直运行。
安装成功
最后我们可以通过浏览器可以直接访问 8080 端口的 nginx 服务:
(防火墙记得开通8080 端口)
下面介绍docker 的一些常用命令:
首先 先查看一下docker --help 可查看docker 所使用的命令:
Commands:
attach Attach local standard input, output, and error streams to a running container
build Build an image from a Dockerfile
commit Create a new image from a container's changes
cp Copy files/folders between a container and the local filesystem
create Create a new container
diff Inspect changes to files or directories on a container's filesystem
events Get real time events from the server
exec Run a command in a running container
export Export a container's filesystem as a tar archive
history Show the history of an image
images List images
import Import the contents from a tarball to create a filesystem image
info Display system-wide information
inspect Return low-level information on Docker objects
kill Kill one or more running containers
load Load an image from a tar archive or STDIN
login Log in to a Docker registry
logout Log out from a Docker registry
logs Fetch the logs of a container
pause Pause all processes within one or more containers
port List port mappings or a specific mapping for the container
ps List containers
pull Pull an image or a repository from a registry
push Push an image or a repository to a registry
rename Rename a container
restart Restart one or more containers
rm Remove one or more containers
rmi Remove one or more images
run Run a command in a new container
save Save one or more images to a tar archive (streamed to STDOUT by default)
search Search the Docker Hub for images
start Start one or more stopped containers
stats Display a live stream of container(s) resource usage statistics
stop Stop one or more running containers
tag Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
top Display the running processes of a container
unpause Unpause all processes within one or more containers
update Update configuration of one or more containers
version Show the Docker version information
wait Block until one or more containers stop, then print their exit codes
这里我们举一个常用命令:
docker search 镜像名称 #查看docker hub 所可下的镜像
docker pull 镜像名称 # 将docker hub 可下载的镜像下载到本地
docker run -dit --name nginx -p 88:80 -v /home/nginx:/etc/nginx nginx
run --name -d 后台运行名称为nginx的容器
-i: 交互式操作。
-t: 终端。
-p 映射的端口为 88 :即端口映射 访问宿主机的88端口 即访问容器内部的80端口
-v: 挂载的目录 即数据持久化 将容器内部目录挂载到本地home/nginx下 即本地修改 内容内部也做修改
这样保证了如果容器挂了 数据还存在
docker start 容器名称 #启动容器
docker restart 容器名称 #重启容器
docker stop docker名称 #停止容器
docker rm 容器名称 #删除容器 (如删除正在运维容器 需加-f)
docker stats 可查看当前所有容器实时运行状态 包括 容器cpu 内存 网络硬盘 占用等情况
docker logs 容器名称 # 可查看
容器技术
明天会讲解 docker file 容器镜像的写法和规则, 后天会讲解容器编排docker-compose 的写法和规则。
如有问题可随时私信我,我是星河一个努力想成为专业运维的业余网管。
以上是关于Linux系统Docker部署及使用方法的主要内容,如果未能解决你的问题,请参考以下文章