Docker 1 前言 2 Docker安装

本文介绍了Docker的基本概念、与虚拟机的区别,并详细阐述了Docker的安装部署过程,包括镜像、容器、镜像仓库和Dockerfile。此外,还探讨了Docker的底层原理和常用命令,提供了容器使用示例,如安装Nginx。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1 前言

在学习具体的docker技术之前,我们先来大概了解一下在与之相关的一些概念

物理机

很久之前,服务器部署应用于物理机之上,整个过程极慢,而且成本就高,也较难迁移和扩展,甚至受限于特定硬件厂商

虚拟机

受限于物理机的诸多缺点,虚拟机应运而生,一台物理机可以通过vmware虚拟化安装多个多个操作系统,每个操作系统都可以运行单独的app,因此一个物理机可以部署多个app

虚拟化的局限性在于,每一个虚拟机都是一个完整的操作系统,要分配系资源,当虚拟机增多时,每个虚拟机可用资源就比较少了,此时必须扩容

Linux部署形式:vmware + (IOS镜像)= 一个可以使用的Linux操作系统

像lnmp集群部署、mysql集群部署、zabbix监控系统我们都是在安装的Linux虚拟机上学习和使用的

部署流程:安装-修改配置文件-启动-使用各种功能

虚拟机工具巨头

· vmware workstation (个人学习使用)主要用于windows平台,创建虚拟机(安装系统)

· 企业版虚拟化 vmware esxi虚拟化工具,高性能服务器结合,进行服务器资源虚拟化

· linux下的虚拟机工具,kvm(创建虚拟机+安装各种系统)

· docker

什么是虚拟化技术

它是异种骨资源管理技术,将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等)予以抽象、转换后呈现出来并可供分割、组合为一个或多个电脑配置环境

vmware创造性地提出了一个二进制翻译技术。vm在虚拟机操作系统和宿主计算机之间扮演了一个桥梁的角色,将虚拟机中要执行的指令“翻译”成恰当的指令在物理计算机上执行,以此来模拟虚拟机中的程序

2 安装部署

容器技术

Docker由go语言开发,是基于Linux内核的Cgroups、NameSpace,以及Union FS等技术,对进程进行封装隔离,属于操作系统层面的虚拟化技术

由于隔离的进程独立于宿主机恶化其它隔离进程,也被称之容器

利用Docker可以实现开发、测试、生产环境的部署一致性,极大的减少运维成本

容器技术和虚拟机的差异

虚拟机技术虚拟的是完整的系统(非常重),docker技术可以实现环境隔离(轻量级)

容器技术直接运行在宿主机的内核上,容器没有自己的内核,不能对硬件虚拟,也因此更轻便

同样配置的宿主机,最多可以启动10个虚拟机的话,可以启动100+的容器数量

启动一个虚拟机,执行的是完整的开机流程,可能需要20s,而启动一个容器只需要1s

KVM需要硬件CPU的虚拟化支持,而容器不需要

docker可以更高效的利用系统资源

只需要docker镜像就可以跨机器、平台测试、运维代码

2.1 docker安装部署

1.购买并解析域名

2.购买服务器

3.更新密码

4.登录云服务器

ssh root@47.100.202.97
Welcome to Alibaba Cloud Elastic Compute Service !

docker最核心的组件

· image镜像,构建容器(我们将应用程序运行所需的环境,打包为镜像文件)

· Container,容器(你的应用程序,就跑在容器中)

· 镜像仓库(保存镜像文件,可以提供上传、下载镜像)作用好比github

· Dockerfile,将你部署项目的操作,写成一个部署脚本,这就是dockerfile,且该脚本还能够构建出镜像文件

5 安装docker

环境准备:一些Linux基础;Centos 7

第一步:下载安装vmware,https://www.vmware.com/

第二步:安装Linux虚拟机

在虚拟机安装Docker依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

添加Docker CE的软件源信息

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

安装Docker CE

yum makecache fast
yum -y install docker-ce

查看Docker版本

docker -v

查看操作系统版本

cat /etc/os-release

启动Docker

注意:无论何时启用docker,都必须确保远程服务器是连接的,若没有连接,请使用以下命令

ssh root@47.100.202.97
systemctl start docker

2.2 Docker底层原理

Docker是一个Client- Server结构的系统,它的守护运行在主机上,通过Socket从客户端访问

Docker Server会接收到Docker client的指令,接着就会执行它

Docker为什么比虚拟机快,因为它的抽象层更少,直接利用的是宿主机的内核

2.3 Docker的常用命令

帮助命令

docker version
docker info
docker --help

2.3.1 镜像命令

docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB

docker -a --all
docker -q --quiet

docker search
docker pull

docker rmi //dele command	

2.3.2 容器命令

1.使用docker拉取镜像(centos)

docker pull centos
Using default tag: latest
latest: Pulling from library/centos
a1d0c7532777: Pull complete 
Digest: sha256:a27fd8080b517143cbbbab9dfb7c8571c40d67d534bbdee55bd6c473f432b177
Status: Downloaded newer image for centos:latest
docker.io/library/centos:latest

查看当前所有镜像

docker images //view all downloaded images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB
centos        latest    5d0da3dc9764   7 months ago   231MB
//一些常见的命令

-d //run at backend
-it //run interactively and enter into a container 
-p //identify container port -p 8080:8080

2.启用并进入、退出容器

docker run -it centos //start and enter container
[root@249d502c705a /]# // 249d502c705a is image id 
ls // view files in container
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr
[root@249d502c705a /]# exit // exit container and container would stop
exit
[root@iZuf6haxydq6zubpf1diuhZ ~]# //now you are in host

ctrl + P + Q // exit but not stop

[root@7097eba682d3 /]# [root@iZuf6haxydq6zubpf1diuhZ ~]# 

docker ps //view again
CONTAINER ID   IMAGE     COMMAND       CREATED              STATUS              PORTS     NAMES
7097eba682d3   centos    "/bin/bash"   About a minute ago   Up About a minute             sad_rubin

3.查看当前所有在运行的容器

docker ps //run at now
CONTAINER ID   IMAGE     COMMAND   CREATED   STATUS    PORTS     NAMES
docker ps -a //view all containers have ever been runned
CONTAINER ID   IMAGE         COMMAND       CREATED          STATUS                        PORTS     NAMES
249d502c705a   centos        "/bin/bash"   16 minutes ago   Exited (130) 13 minutes ago             nostalgic_almeida
b7d27d0311db   hello-world   "/hello"      8 hours ago      Exited (0) 8 hours ago                  amazing_cerf
c75453b50cdd   hello-world   "/hello"      9 hours ago      Exited (0) 9 hours ago                  quirky_kirch
docker ps -a -n=1 //just list the latest container has been runned
CONTAINER ID   IMAGE     COMMAND       CREATED          STATUS                        PORTS     NAMES
249d502c705a   centos    "/bin/bash"   19 minutes ago   Exited (130) 15 minutes ago             nostalgic_almeida
docker ps -aq //list all container ids
249d502c705a
b7d27d0311db
c75453b50cdd

4.删除容器

docker rm 7097eba682d3 // delet a identify container,the running can not be deleted
docker rm 5637c729cb90
5637c729cb90  // delete asccess!
docker rm -f $(docker ps -aq) //force to delete all containers

5.启动和停止容器

docker start 2dc2b3517a23 
docker restart 2dc2b3517a23
docker stop 2dc2b3517a23
docker kill 2dc2b3517a23

6.常用其他命令

docker run -d centos //start at backend
9110ce46e6b446ce65e4e7d398da4c30e3a439e160344c07b9ca2ccd3cbd4a52
docker logs -tf --tail 10 c29cd7a12e41 //if there is no log in container,it will print nothing

docker run -d centos bin/sh -c "while true;do echo yivei;sleep 1;done" //you can input a test and rerun logs command as follow 

docker logs -tf --tail 10 c29cd7a12e41 //now it lists logs as follow

[root@iZuf6haxydq6zubpf1diuhZ ~]# docker logs -tf --tail 10 c29cd7a12e41
2022-04-17T01:29:01.648293615Z yivei
2022-04-17T01:29:02.650880028Z yivei
2022-04-17T01:29:03.653628153Z yivei
2022-04-17T01:29:04.656317351Z yivei
2022-04-17T01:29:05.658861168Z yivei
2022-04-17T01:29:06.661429835Z yivei
2022-04-17T01:29:07.664096826Z yivei
2022-04-17T01:29:08.667242807Z yivei

7.查看容器中进程信息

docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c29cd7a12e41   centos    "bin/sh -c 'while tr…"   14 minutes ago   Up 14 minutes             funny_rubin
[root@iZuf6haxydq6zubpf1diuhZ ~]# docker top c29cd7a12e41
UID                 PID                 PPID                C                   STIME               TTY                 TIME                CMD
root                14119               14100               0                   09:22               ?                   00:00:00            bin/sh -c while true;do echo yivei;sleep 1;done
root                16130               14119               0                   09:37               ?                   00:00:00            /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1

8.查看镜像元数据

docker ps
CONTAINER ID   IMAGE     COMMAND                  CREATED          STATUS          PORTS     NAMES
c29cd7a12e41   centos    "bin/sh -c 'while tr…"   14 minutes ago   Up 14 minutes             funny_rubin
docker inspect c29cd7a12e41

9.进入当前正在运行的容器

方式一:

//打开新的终端

docker exec -it c29cd7a12e41 /bin/bash
[root@c29cd7a12e41 /]#  // successful	
[root@c29cd7a12e41 /]# ls
bin  etc   lib	  lost+found  mnt  proc  run   srv  tmp  var
dev  home  lib64  media       opt  root  sbin  sys  usr

方式二:

如下方式是直接进入正在执行的命令行

docker attach  c29cd7a12e41 //

10.从容器内拷贝文件到主机上

docker attach 7d796cccebe9 //进入容器
cd /home //进入本地目录
touch jianquanqin.java 7d796cccebe9 //创建文件
exit // 退出容器
docker cp 7d796cccebe9:/home/jianquanqin.java /home //将文件拷贝至主机

2.3.4 容器使用范例

安装Nginx

docker search // 也可以去dockerhub 去查看详细的版本信息
docker pull nginx //下载Nginx
docker images //查看下载的镜像
docker images
REPOSITORY    TAG       IMAGE ID       CREATED        SIZE
nginx         latest    12766a6745ee   2 weeks ago    142MB
hello-world   latest    feb5d9fea6a5   6 months ago   13.3kB
centos        latest    5d0da3dc9764   7 months ago   231MB

docker run -d --name nginx2 -p 22:80 nginx //运行镜像 --name 重命名
curl localhost:3344 //测试
然后再使用公网ip去测试 //测试成功

注意:要使用公网,请务必保证安全组开了合适的端口,否则无法访问成功

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值