首页 > 其他分享 >Docker

Docker

时间:2024-08-05 23:25:57浏览次数:13  
标签:容器 run nginx 镜像 Docker com docker

文章目录

1 Docker简介

Docker是一个开源的应用容器引擎,基于Go语言并且遵从Apache2.0协议开源。

Docker可以帮助我们屏蔽环境差异,也就是说,只要你的应用程序和它运行所依赖的环境打包到了同一个Docker容器中,那么这个Docker容器不管运行在哪里,都会有完全一致的表现。

Docker的口号:“build once, run everywhere”。一次构建,处处运行。

2 核心概念

  • 镜像(Image)

    Docker镜像就类似于操作系统的镜像(比如之前安装虚拟机使用到的Ubuntu18),是一个只读的模版。一个镜像中包含了一个或多个特定的应用程序以及运行他们所依赖的应用程序。

  • 容器(Container)

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

  • 仓库(Repository)

    仓库是集中存放镜像文件的场所。推荐使用的是官方仓库地址网易云仓库。当然,企业也可以搭建自己的仓库。

3 安装

3.1 准备工作

# 需要先执行更新命令
sudo apt-get update

# 如果是新安装的虚拟机,执行失败,那么执行以下命令
sudo apt-get install --reinstall libappstream4

如果虚拟机上已经存在docker,那么需要先卸载可能存在的旧版本

# 查找docker相关的软件
dpkg -l |grep docker


如上图所示,查到一个docker,还有一个docker.io,需要删除掉

# --purge: 删除软件以及相关的配置文件
sudo apt-get remove --purge docker*

3.2 安装docker

# 下载curl工具
sudo apt install curl

# 安装方式1
# 安装docker
curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

# 安装方式2
# 下载安装脚本
curl -fsSL https://get.docker.com -o get-docker.sh
# 执行安装脚本
sudo sh ./get-docker.sh

查看docker版本

docker version


出现上图,表示docker安装成功。

3.3 Docker配置

3.3.1 权限配置

# 添加docker用户组
sudo groupadd docker

# 将当前登录用户添加到docker用户组中
sudo gpasswd -a $USER docker

#更新用户组
newgrp docker

# 测试docker命令是否可以在当前用户下正常使用
docker version


如上图所示,docker权限配置好了之后,会显示出更多更完整的信息

如果出现以下提示,那么需要/var/run/docker.sock权限

# 添加权限
sudo chmod a+rw /var/run/docker.sock

设置开机自启

sudo systemctl enable docker

3.3.2 镜像仓库加速

这里推荐使用阿里云镜像仓库加速配置。【官方配置地址

可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

sudo mkdir -p /etc/docker
# 修改docker配置文件
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://zejr5fth.mirror.aliyuncs.com"]
}
EOF
# 加载新的配置文件
sudo systemctl daemon-reload
# 重启docker
sudo systemctl restart docker

# 验证docker镜像加速配置是否成功
# 查看docker详细信息
docker info

补充说明:docker镜像加速地址有很多,也可以配置别的镜像加速地址

  • Docker官方:https://registry.docker-cn.com

  • 网易:http://hub-mirror.c.163.com

  • 中科大:https://docker.mirrors.ustc.edu.cn

  • 腾讯云:https://mirror.ccs.tencentyun.com

如果速度不如预期,也可以在daemon.json中配置其他的镜像加速地址

4 使用

4.1 Docker命令总结

# 查看本机所有镜像
docker images

#删除镜像 只使用镜像名称时,默认删除最新版本,如果没有,先下载
docker rmi 镜像id | 镜像名称:版本


#下载镜像
docker pull 镜像名称:版本信息


# 容器相关命令
# 查看容器(所有容器)
docker ps		// 查看出来的是正在运行的容器
docker ps -a	// 查看所有的容器,包括正在运行的和已经停止的

# 删除容器
docker rm 容器名字|容器id

# 运行容器
docker run
    -d	 // 指运行了容器之后,容器不会直接退出,而是在后台运行
    --name // 给容器指定一个名字,如果没有指定,docker会帮助我们生成一个,名字是唯一的
    -it	 // 以交互的方式运行容器,并且给容器分配一个输入终端(输入终端需要指定)
    -p	宿主机的端口:容器内部的端口 // 端口映射
    -v  宿主机的文件目录:容器内部的文件目录 // 文件映射
    -e  // 添加环境变量
镜像:版本  (操作指令)

# 停止容器
docker stop 容器id | 容器名

#启动容器
docker start 容器id | 容器名   

# 重启容器
docker restart 容器id | 容器名

# 进入容器内部(并分配一个输入终端)
docker exec -it 容器id | 容器名  bash

# 查看容器的运行日志 -f表示监视log尾部变化
docker logs [-f] 容器id | 容器名

4.2 镜像相关的命令

想要启动一个容器,首先需要找到它的镜像的。镜像相关的命令如下:

  • 列出本机的所有镜像:

    docker images
    #REPOSITORY 		TAG 			ID 					CREATED 		SIZE
    #nginx 				1.21.6 			0e901e68141f 		6 weeks ago 	142MB
    

    这个命令会展示镜像的信息:包括镜像的仓库源(REPOSITORY)、标签(TAG)、镜像ID(IMAGE ID)、 创建时间和大小。

  • 从仓库当中拉取镜像到本地:

    docker pull nginx:1.21.6
    #1.21.6: Pulling from library/nginx
    #42c077c10790: Pull complete
    #62c70f376f6a: Pull complete
    #915cc9bd79c2: Pull complete
    #75a963e94de0: Pull complete
    #7b1fab684d70: Pull complete
    #db24d06d5af4: Pull complete
    #Digest: sha256:2bcabc23b45489fb0885d69a06ba1d648aeda973fae7bb981bafbb884165e514
    #Status: Downloaded newer image for nginx:1.21.6
    #docker.io/library/nginx:1.21.6
    

    拉取镜像的来源地是仓库——一般使用的是公共仓库,比如默认的hub.docker.com,团队自己也可以建立私有仓库。

  • 删除本地镜像:

    docker rmi nginx:1.21.6
    
    docker rmi 镜像id
    

4.3 容器相关的命令

4.3.1 创建并启动容器

通过docker run命令可以从镜像当中启动容器。

docker run nginx

默认情况,执行docker run的效果会寻找镜像,如果相应的镜像不存在,那么会自动从公开仓库当中拉取;然后启动运行容器;随后附加的命令,在本例中附加命令为空。对应nginx容器,就会进入容器内部nginx的交互终端,可以使用ctrl+c从容器当中退出,但是同时也会停止容器。

如果给容器指定附加指令,对于nginx容器而言,会直接执行该指令,随后容器就停止了。

docker run nginx echo hello
hello

使用–help选项可以获取命令的简明帮助:

docker run --help
# -i, 以交互模式运行容器,通常与 -t 同时使用
# -t, 为容器重新分配一个伪输入终端,通常与 -i 同时使用
# -d, 后台运行容器,并返回容器ID
# --name="nginx-cskaoyan": 为容器指定一个名称
# -e username="cskaoyan": 设置环境变量参数
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
# -v: 文件挂载,映射文件

假如需要进入容器内部,通过shell命令和容器交互

docker run -it nginx /bin/bash

上述命令执行之后,用户就可以进入容器内部,像使用一个普通的shell操作容器内部文件系统。使用ctrl+d可以退出容器并停止容器。

使用-d选项可以以守护进程的形式运行容器:

docker run -d nginx

4.3.2 查看容器

我们还可以查看容器

docker ps  # 列出运行当中的容器
docker ps -a  # 列出所有的容器

docker rm 容器名|ID  # 删除停止状态的容器
# 容器id			  镜像      启动命令                 创建时间          状态       端口映射
#CONTAINER ID      IMAGE     COMMAND                 CREATED         STATUS    PORTS
#d05375d418cf	   nginx     "/docker-entrypoint.."  9 seconds ago   Exited    0.0.0.0:80->80

4.3.3 进入运行中的容器

假若一个容器已经存在并且正在运行,使用docker exec 进入容器

docker exec -it 容器名 /bin/bash

4.3.4 查看容器日志

# 容器日志查看
docker logs [-f] 容器ID|容器名

4.3.5 容器的启停命令

当然也可以停止、启动、重启或者是删除容器

# 停止容器
docker stop 容器ID|容器名

# 启动容器
docker start 容器ID|容器名

# 重启容器
docker restart 容器ID|容器名

4.3.6 容器的删除命令

# 删除容器
docker rm 容器ID|容器名

4.4 端口映射

容器天生具有隔离的特性,所以不同的容器拥有独立的网络系统。这样的话,两个不同的容器在容器内部完全可以使用相同的端口,并且可以使用宿主机当中已经使用的端口——这些相同的端口号实际上是毫无关联的,彼此之间也无法进行网络通信。如果希望通过容器来对外提供服务,就需要为容器的端口和宿主机的端口建立映射。

使用docker run的-p选项可以实现端口映射:

# 将宿主机的8080端口映射到容器的80
# -p: 指定端口映射,格式为:主机(宿主)端口:容器端口
docker run -d -p 8080:80 nginx

4.5 文件映射

容器天生具有隔离的特性,所以不同的容器拥有独立的文件系统。在容器内部做任何的修改,都不会影响到宿主机或者其他容器。如果容器一旦被删除,那么容器中的一切数据就都不存在了,所以如果想要让容器再被删除之后,仍然可以访问到容器中的数据(比如对于数据库类型中的数据),就需要将容器内部的某个目录映射到宿主机文件系统当中,从而让数据保存到宿主机,这样一来,即使容器被删除了,我们也可以在宿主机中访问到之前容器中的数据

使用docker run 的-v可以实现数据持久化:

docker run -d -p 0.0.0.0:8081:80 -v /tmp/test:/usr/share/nginx/html nginx


容器中访问的/usr/share/nginx/html和宿主系统的/tmp/test的内容是一致,并且任何形式的修改都会在宿主系统和容器当中共享。

# 在容器内部执行
echo "<html>hello world</html>" > /usr/share/nginx/html/index.html
# 相当于在宿主系统当中执行
sudo echo "<html>hello world</html>" > /tmp/test/index.html

5 Bug

5.1 问题描述

修改docker的配置文件后,重启docker,结果报错了

5.2 排查问题

①输入docker version查看docker是否安装成功,排查结果:安装成功


②卸载docker,重新安装。排查结果:使用命令查看是否有docker,但又没有找到docker


③查看发现使用的是snap安装的docker,安装命令如下:


使用如下命令查看snap安装的程序列表

使用命令删除snap安装的docker

④使用命令重新安装docker,结果报错,需要更新apt



⑤apt更新失败,编辑sources.list,对Ubuntu换源

# 阿里源
deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse

⑥换源成功,更新apt,重新使用命令安装docker,问题解决。


snap、apt、yum的区别

apt是ubuntu的应用市场,yum是centOS的应用市场,snap是第三方应用市场,即可在ubuntu上使用,又可以在centOS上使用。

标签:容器,run,nginx,镜像,Docker,com,docker
From: https://blog.csdn.net/gaosw0521/article/details/140939063

相关文章

  • 01-初识Docker
    1.常规应用部署面临的问题部署流程复杂环境不一致资源隔离问题交付流程复杂1)JavaWEB架构:代码打包——>上传镜像仓库——>镜像下载至服务器——>服务器运行镜像2)JavaSpingboot一体式架构:代码打包——>上传镜像仓库——>镜像下载至服务器——>服务器运行镜像3)JavaCl......
  • docker容器技术
    认识docker一、为什么学习docker使用背景 某公司的产品运行在内部的虚拟化平台中,如openstack,也就是我们所学的KVM虚拟化,创建虚拟机。但是不断增加的云端应用,增加了对硬件资源的消耗,不断的创建虚拟机,给公司带来了难题,公司已经在云平台上运行了多台云主机,消耗了大量的硬件资......
  • Docker快速入门
    DockerDocker:快速构建、运行、管理应用的工具安装docker需要安装Linux虚拟机教程:‍⁠‬‍‍‍‍‌⁠‍‬‌‬‍‬‍‬‍‬Linux环境搭建-飞书云文档(feishu.cn)Linux虚拟机操作过于繁琐安装MobaXterm来解决这个问题在虚拟机中安装docker后进行以下操作CentOS7配置......
  • 基于Docker Swarm、Portainer和Jenkins的Spring Cloud服务自动构建和部署
    本文探讨基于DockerSwarm、Portainer和Jenkins的SpringCloud微服务自动构建和部署。相对本文讨论的方案,业界更主流的是基于k8s,显而易见k8s的功能更强大,但也更复杂,也需要投入更多开发和运维成本。对于小公司,集群规模不会很大,DockerSwarm加上Portainer可以满足大部分需求,建议可以......
  • K8s和docker的关系
    k8s(kubernetes)是一个容器编排器,没容器的话也没编排。所以他是一个容器编排的系统,主要围绕pods进行工作。pods是k8s生态中最小的调度单位,可以包容一个或者多个容器。k8s是一个docker容器的管理工具核心功能:自愈:重启启动失败的容器,在节点不可用时,替换节点上的容器,对用户定义的不......
  • centos下使用阿里云镜像安装docker
    环境:OS:Centos7步骤1:[[email protected]]#yuminstall-yyum-utilsdevice-mapper-persistent-datalvm2Loadedplugins:fastestmirror,langpacksLoadingmirrorspeedsfromcachedhostfileCouldnotretrievemirrorlisthttp://mirrorlist.centos.org/?......
  • docker使用
    创建并运行容器:FROMpython:3.10-slimWORKDIR/appCOPY..RUNpipinstallnumpyCMD["python","a.py"]首先创建一个Dockerfile然后FROM指定基础镜像,WORKDIR指定之后所有docker命令工作路径,COPY把文件从一个本地路径拷贝到镜像路径(这里就是把当前目录的所有内容拷贝到镜......
  • Docker 网络
    Docker网络是Docker容器化平台的重要组成部分,它允许容器之间以及容器与外部网络进行通信。Docker提供了多种网络驱动和配置选项,以满足不同的网络需求。本文将详细介绍Docker网络的相关知识,并提供示例帮助理解。1.Docker网络基础1.1网络驱动Docker支持多种网络......
  • wsl docker里运行ollama并使用nvidia gpu的一些记录
     1、安装wsl2具体过程网上一搜一把,这里就先略过了,只有wsl2能用哈2、wsl里装docker,及相关配置装dockerwget https://download.docker.com/linux/static/stable/aarch64/docker-23.0.6.tgzcd/mydata/tmp/tar -zxvf docker-23.0.6.tgzmvdocker/*/usr/bin/mvdock......
  • Docker网络管理
    一、Docker网络实现原理Docker使用Linux桥接,在宿主机虚拟一个Docker容器网桥(docker0),Docker启动一个容器时会根据Docker网桥的网段分配给容器一个IP地址,称为Container-IP,同时Docker网桥是每个容器的默认网关。在同一宿主机内的容器都接入同一个网桥,这样容器之间就能够通过容器......