Docker常见使用

news2025/1/10 16:29:44

Docker常见使用

1、Docker安装

## 下载阿里源repo文件
$ curl -o /etc/yum.repos.d/Centos-7.repo http://mirrors.aliyun.com/repo/Centos-7.repo
$ curl -o /etc/yum.repos.d/docker-ce.repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo

$ yum clean all && yum makecache
## yum安装
$ yum install -y docker-ce
## 查看源中可用版本
$ yum list docker-ce --showduplicates | sort -r
## 安装指定版本
##yum install -y docker-ce-18.09.9

## 配置源加速
## https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors
mkdir -p /etc/docker
vi /etc/docker/daemon.json
{
  "registry-mirrors" : [
    "https://8xpk5wnt.mirror.aliyuncs.com",
    "https://dockerhub.azk8s.cn",
    "https://registry.docker-cn.com",
    "https://ot2k4d59.mirror.aliyuncs.com/"
  ]
}

## 设置开机自启
systemctl enable docker  
systemctl daemon-reload

## 启动docker
systemctl start docker 

2、Docker指令

## 查看docker信息
docker info

## 设置开机自启
systemctl enable docker 

## 启动docker
systemctl start docker

## 重启docker
systemctl restart docker

## 停止docker
systemctl stop docker

## docker-client 查看docker安装后的目录
which docker

## docker daemon  进程监控,查看当前进程的情况
ps aux |grep docker

## 查看运行状态的容器列表
$ docker ps

## 查看全部状态的容器列表
$ docker ps -a

3、Docker核心要素

三大核心要素:镜像(Image)、容器(Container)、仓库(Registry)

镜像(Image)

打包了业务代码及运行环境的包,是静态的文件,不能直接对外提供服务。

容器(Container)

镜像的运行时,可以对外提供服务。本质上讲是利用namespace和cgroup等技术在宿主机中创建的独立的虚拟空间。

仓库(Registry)

  • 公有仓库,Docker Hub,阿里,网易…
  • 私有仓库,企业内部搭建
    • Docker Registry,Docker官方提供的镜像仓库存储服务
    • Harbor, 是Docker Registry的更高级封装,它除了提供友好的Web UI界面,角色和用户权限管理,用户操作审计等功能
  • 镜像访问地址形式 registry.devops.com/demo/hello:latest,若没有前面的url地址,则默认寻找Docker Hub中的镜像,若没有tag标签,则使用latest作为标签
  • 公有的仓库中,一般存在这么几类镜像
    • 操作系统基础镜像(centos,ubuntu,suse,alpine)
    • 中间件(nginx,redis,mysql,tomcat)
    • 语言编译环境(python,java,golang)
    • 业务镜像(django-demo…)

在这里插入图片描述

4、镜像指令

## 查看所有镜像
docker images

## 拉取镜像 docker pull 镜像名:version
docker pull nginx:alpine

## 导出镜像到文件中
docker save -o nginx-alpine.tar nginx:alpine

## 从文件中加载镜像
docker load -i nginx-alpine.tar

## 删除镜像 docker rmi 镜像id/镜像名:tag(version)
docker rmi nginx:alpine

5、推送本地镜像到镜像仓库中

内部系统

## 打tag
docker tag nginx:alpine localhost:5000/nginx:alpine 
## 推送到本地镜像仓库(内部)
docker push localhost:5000/nginx:alpine

外部系统

## tag
docker tag nginx:alpine 192.168.200.128:5000/nginx:alpine

## 推送
docker push 192.168.200.128:5000/nginx:alpine
## 报错信息如下
The push refers to repository [192.168.200.128:5000/nginx]
Get https://192.168.200.128:5000/v2/: http: server gave HTTP response to HTTPS client

## docker默认不允许向http的仓库地址推送,如何做成https的,参考:https://docs.docker.com/registry/deploying/#run-an-externally-accessible-registry
## 我们没有可信证书机构颁发的证书和域名,自签名证书需要在每个节点中拷贝证书文件,比较麻烦,因此我们通过配置daemon的方式,来跳过证书的验证:

cat /etc/docker/daemon.json

{
  "registry-mirrors": [
    "https://8xpk5wnt.mirror.aliyuncs.com"
  ],
  ## 跳过验证
  "insecure-registries": [
     "192.168.200.128:5000"
  ]
}

systemctl restart docker
docker push 192.168.200.128:5000/nginx:alpine

6、容器指令

容器运行

## 后台运行
docker run --name nginx -d nginx:alpine

docker run -i -t -d参数区别

OptionsMean
-i以交互模式运行容器,通常与 -t 同时使用;
-t为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-d后台运行容器,并返回容器ID;

实际上,在运行容器的时候,镜像地址后面跟的命令等于是覆盖了原有的容器的CMD命令,因此,执行的这些命令在容器内部就是1号进程,若该进程不存在了,那么容器就会处于退出的状态,比如,宿主机中执行。

docker run -d --name test_echo nginx:alpine echo 1,容器会立马退出。

测试如下:

-d

测试1:docker run -d --name ubuntu1 ubuntu:19.10

在这里插入图片描述

测试2:

docker run -d --name=test_redis \
-p 6379:6379 \
-v $PWD/redis/redis.conf:/etc/redis/redis.conf  \
-v $PWD/redis/data:/data  \
redis:latest echo 1

在这里插入图片描述

在这里插入图片描述

-i

测试1:docker run -i --name ubuntul2 ubuntu:19.10
在这里插入图片描述

输入指令:exit 后观察如下图

在这里插入图片描述

-t

测试1:docker run -t --name ubuntul3 ubuntu:19.10

在这里插入图片描述

进入容器

docker exec -it <container_id_or_name> /bin/bash

宿主机与容器间数据拷贝

## 拷贝宿主机数据到容器
docker cp /tmp/test.txt nginx:/tmp

## 拷贝容器数据到宿主机
docker cp nginx:/tmp/test.txt ./

容器数据持久化-数据卷

## -v
docker run --name nginx -d  -v /opt:/opt -v /var/log:/var/log nginx:alpine

docker run -id \
-p 3306:3306 \
--name=new_mysql \
-v $PWD/mysql5.7/conf:/etc/mysql/conf.d \
-v $PWD/mysql5.7/logs:/logs \
-v $PWD/mysql5.7/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
mysql:5.7

查看容器日志

## 查看全部日志
$ docker logs nginx

## 实时查看最新日志
$ docker logs -f nginx

## 从最新的100条开始查看
$ docker logs --tail=100 -f nginx

容器启动、删除

## 停止运行中的容器
$ docker stop nginx

## 启动退出容器
$ docker start nginx

## 删除退出容器
$ docker rm nginx

## 删除运行中的容器
$ docker rm -f nginx

查看容器或者镜像的明细

## 查看容器详细信息,包括容器IP地址等
$ docker inspect nginx

## 查看镜像的明细信息
$ docker inspect nginx:alpine

容器中使用vi指令

apt-get update

## 进行安装
apt-get install vim

7、DockerFile

创建Dockerfile文件

## 	告诉docker使用哪一个镜像作为模板,后续命令都以该镜像为基础
FROM ubuntu

## RUN命令会在上面指定的镜像里执行命令
RUN apt-get update && apt install -y nginx

## 告诉docker,启动容器时执行如下命令
CMD ["/usr/sbin/nginx","-g","daemon off;"]

详情可以查看:DockerFile

8、Docker Compose

Compose

Compose 是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后,使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。

Compose 使用的三个步骤

  • 使用 Dockerfile 定义应用程序的环境。
  • 使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
  • 最后,执行 docker-compose up 命令来启动并运行整个应用程序。

例子:

Dockerfile

# 设置基础镜像
FROM nginx
# 作者
MAINTAINER torlesse <xxxxx@qq.com>
# 将dist文件中的内容复制到 /usr/share/nginx/html/ 这个目录下面
#COPY dist/  /usr/share/nginx/html/
#COPY nginx.conf /etc/nginx/nginx.conf
RUN echo 'echo nginx init ok!!'

FROM java:8
VOLUME /tmp
ADD authtask-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8081
ENTRYPOINT [ "java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar" ]
RUN echo 'echo springboot-project run ok!!'

DockerCompose.yml

version: '3.2'
services:
  proxy:
    image: nginx
    ports:
      - 18090:8088
      - 8081:8081
    privileged: true
    volumes:
      - /root/torlesse/auth/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
      - /root/torlesse/auth/nginx/www:/usr/share/nginx/html
      - /root/torlesse/auth/nginx/logs:/var/log/nginx
  torlesse:
    build: .
    image: auth
    ports:
     - "8086:8081"

详情请查看:DockerCompose

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680410.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux系统编程(多进程编程深入2)

文章目录 前言一、进程退出状态二、进程退出状态宏的使用三、wait的局限性四、waitpid函数讲解五、使用fork函数创建两次孙进程解决子问题总结 前言 本篇文章继续讲解多线程编程。 一、进程退出状态 进程退出状态&#xff08;Exit Status&#xff09;指的是进程在终止时返回…

HTML中的常用标签用法

作者&#xff1a;爱塔居 专栏&#xff1a;javaEE 作者简介&#xff1a;大三学生&#xff0c;希望和大家一起进步 目录 一、注释标签 二、标题标签&#xff1a;h1-h6 三、段落标签&#xff1a;p 四、换行标签&#xff1a;br 五、格式化标签 六、图片标签&#xff1a;img 七、超链…

快速排序到底有多快

作者主页&#xff1a;paper jie的博客_CSDN博客-C语言,算法详解领域博主 本文作者&#xff1a;大家好&#xff0c;我是paper jie&#xff0c;感谢你阅读本文&#xff0c;欢迎一建三连哦。 本文录入于《算法详解》专栏&#xff0c;本专栏是针对于大学生&#xff0c;编程小白精心…

ECS服务器上搭建一个Java开发环境

ECS服务器上搭建一个Java开发环境 本步骤将在ECS服务器上搭建一个Java开发环境&#xff0c;包括OpenJDK 1.8和Maven 3.6.3&#xff0c;并配置阿里云镜像仓库。 执行如下命令&#xff0c;安装OpenJDK 1.8。 yum -y install java-1.8.0-openjdk-devel.x86_64执行如下命令&…

【NLP】用python实现文本转语音处理

一、说明 介绍一款python调用库&#xff0c;离线软件包pyttsx3 API&#xff0c;它能够将文字转化成语音文件。Python 中有多种 API 可用于将文本转换为语音。pyttsx3 是一个非常易于使用的工具&#xff0c;可将输入的文本转换为音频。与其它类似的库不同&#xff0c;它可以离线…

AutoSAR系列讲解(入门篇)2.2-SWC的类型(APPL)

SWC的类型 一、原子级的SWC&#xff08;Atomic SWC&#xff09; 二、集合级的SWC&#xff08;Composition SWC&#xff09; 三、特殊的SWC 一、原子级的SWC&#xff08;Atomic SWC&#xff09; 原子级的SWC&#xff08;Atomic SWC&#xff09;&#xff1a;故名思意&#xff…

git 的基本操作

1. git建立本地仓库 在想要建立的目录下输入命令 git init 我们可以看一下 .git目录下有什么 2. 配置git本地仓库 配置用户的 name 和 email 命令&#xff1a;git config [...] 配置完后&#xff0c;我们像查看一下 刚才的配置 2.1 查看配置命令 git config -l 2.2 删除…

【CS144-2021】Stanford 计算机网络课程学习

CS144 2019 Fall&#xff1a;https://kangyupl.gitee.io/cs144.github.io/2020 Fall&#xff1a;https://github.com/lawliet9712/Stanford-CS144-2021【推荐】2021 Fall&#xff1a;https://github.com/Kiprey/sponge 前前后后弄了半个月&#xff0c;终于啃完 CS144 了&#…

VLAN基础知识3_VLAN间三层通信(单臂路由)

目录 1.VLAN单臂路由简介 2.基于单臂路由VLAN间三层通信原理 3.VLAN间三层通信单臂路由实验 3.1 常用配置命令 3.2 实验配置步骤 3.3实验效果 1.VLAN单臂路由简介 单臂路由&#xff08;One-Arm Router&#xff09;是一种网络拓扑结构&#xff0c;其中一个路由器的一个接…

动手写一个 Java JWT Token 生成组件

OAuth2 中默认使用 Bearer Tokens (一般用 UUID 值)作为 token 的数据格式&#xff0c;但也支持升级使用 JSON Web Token(JWT) 来作为 token 的数据格式。实际来说&#xff0c;OAuth 规范中并无限制 Token 采取何种格式。今天我们就采用 JWT 来作为 Token&#xff0c;它的一个好…

四种缓存的避坑总结

背景 分布式、缓存、异步和多线程被称为互联网开发的四大法宝。今天我总结一下项目开发中常接触的四种缓存实际项目中遇到过的问题。 JVM堆内缓存 JVM堆内缓存因为可以避免memcache、redis等集中式缓存网络通信故障问题&#xff0c;目前还在项目中广泛使用。 堆内缓存需要注…

FFmpeg5.0源码阅读——avformat_find_stream_info

摘要&#xff1a;在使用FFmpeg库时通常使用avformat_find_stream_info相关函数来探测流的基本信息&#xff0c;为了更加深入理解FFmpeg的基本流程&#xff0c;本文根据FFmpeg 5.0的源码详细描述了该函数的具体实现。   关键字&#xff1a;FFmpeg   读者须知&#xff1a;读者…

数学之美:神奇的杨辉三角形,比帕斯卡早了近600年,致敬中国古代数学家(63)

小朋友们好&#xff0c;大朋友们好&#xff01; 我是猫妹&#xff0c;一名爱上Python编程的小学生。 和猫妹学Python&#xff0c;一起趣味学编程。 今日主题 什么是杨辉三角形&#xff1f; 杨辉三角形有什么规律&#xff1f; 中国古代数学家杨辉。 西方科学家帕斯卡。 杨…

【开源与项目实战:开源实战】81 | 开源实战三(上):借Google Guava学习发现和开发通用功能模块

上几节课&#xff0c;我们拿 Unix 这个超级大型开源软件的开发作为引子&#xff0c;从代码设计编写和研发管理两个角度&#xff0c;讲了如何应对大型复杂项目的开发。接下来&#xff0c;我们再讲一下 Google 开源的 Java 开发库 Google Guava。 Google Guava 是一个非常成功、…

智能指针类模板:auto_ptr、unique_ptr、shared_ptr的原理与使用

1. 什么是智能指针 智能指针是行为类似于指针的类对象&#xff0c;通常用于管理动态内存分配。C程序通常手动动态分配堆内存&#xff0c;但如果动态分配的内存没有释放&#xff0c;则会发生内存泄漏。 例如代码段1.1。 // 代码段1.1 void demo() {double *pd new double;*pd…

使用STM32F103的串口实现IAP程序升级功能

使用STM32F103的串口实现IAP程序升级功能 &#x1f3ac;IAP程序烧录全过程演示&#xff1a; ✨这几天折腾IAP升级功能&#xff0c;狂补了很多相关BootLoader相关的知识。本来最想实现IAP升级程序的方式是&#xff0c;基于SPI通讯的SD卡&#xff0c;借助挂载的FatFS文件系统&am…

C++中的内存分区

目录 操作系统的内存区域 C内存分区模型 1. 程序运行前 2. 程序运行后 3. new 操作符的使用 操作系统的内存区域 text段&#xff1a;存储程序的二进制指令&#xff0c;即程序源码编译后的二进制代码data段&#xff1a;存储已被初始化的全局变量、常量bss段&#xff1a;存储…

ES-工作原理

前言 ​ 搜索引擎是对数据的检索&#xff0c;而数据总体分为两种&#xff1a;结构化数据和非结构化数据。而对于结构化数据&#xff0c;因为他们具有特定的结构&#xff0c;所以一般都是可以通过关系型数据库MySQL/oracle的二维表的方式存储和搜索&#xff0c;也可以建立索引。…