首页 > 其他分享 >docker 学习笔记

docker 学习笔记

时间:2023-09-11 09:56:30浏览次数:47  
标签:容器 run -- 笔记 学习 挂载 镜像 docker

1、基本命令

docker version     #查看docker的版本信息
docker info        #查看docker的系统信息,包括镜像和容器数量
docker 命令--help  #查看命令帮助文档

  

命令的帮助文档地址:https://docs.docker.com/engine/reference/commandline/docker/   2、镜像命令
docker images        #查看本地主机所有镜像
docker search        #搜索镜像
docker pull 镜像名    #下载镜像
docker rmi -f 镜像ID  #删除镜像
docker rmi -f  $(docker images -aq) #递归删除所有镜像

  

  3、容器命令
docker pull 容器名  #拉取一个容器 例:docker pull centos
docker run [可选参数] image
#参数说明
--name="名字"           指定容器名字
-d                     后台方式运行
-it                    使用交互方式运行,进入容器查看内容
-p                     指定容器的端口
(
-p ip:主机端口:容器端口  配置主机端口映射到容器端口
-p 主机端口:容器端口
-p 容器端口
)
-P  
docker run -it centos /bin/bash #运行并进入容器
exit #退出容器
Ctrl+P+Q  不停止容器退出
docker ps -a #查看列出所有运行的容器
docker rm 容器Id #删除容器,不能删除正在运行的容器,强制删除使用 rm
docker rm -f $(docker ps -aq)   #删除所有的容器
docker ps -a -q|xargs docker rm #删除所有的容器
docker start 容器id          #启动容器
docker restart 容器id        #重启容器
docker stop 容器id           #停止当前运行的容器
docker kill 容器id           #强制停止当前容器
docker update --restart=always 容器id #无论退出状态是如何,都重启容器
#进入容器,如果vi提示未找到命令,需要安装
apt-get update
apt-get install vim

  

  4、其他命令
docker logs  -tf 容器id  docker logs --tail="10" 136dc0a9dc7c
docker logs --tail number 容器id #num为要显示的日志条数
docker top 容器ID     #查看容器中进程信息
docker inspect 容器ID #查看容器的元数据
docker exec -it 容器ID /bin/bash  #进入当前正在运行的容器
docker attach 容器ID  #进入当前正在运行的容器
docker cp 容器id:容器内路径 目的主机路径 #拷贝容器的文件到主机中
docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker exec 进入容器后开启一个新的终端,可以在里面操作
docker attach 进入容器正在执行的终端,不会启动新的进程

  

5、Docker 安装 Nginx
docker pull nginx
docker run -d --name nginx01 -p 3334:80 nginx 
-d 后台运行
--name 给容器命名
-e TZ="Asia/Shanghai" 设置时区
-p 3334:80 将宿主机的端口3334映射到该容器的80端口
如果报下面错误,执行命令重启docker服务 systemctl restart docker
docker: Error response from daemon: driver failed programming external 
connectivity on endpoint lamp

  

  6、运行NetCore程序
docker pull microsoft/dotnet #安装Net
docker run -it microsoft/dotnet
//创建demo文件夹
$ mkdir demo
$ cd demo
//创建项目名为HelloDocker.Web的.NET Core MVC项目
dotnet new mvc -n HelloDocker.Web
//进入HelloDocker.Web文件夹
cd HelloDocker.Web
//启动.NET Core MVC项目
dotnet run
//将宿主文件信息共享到docker 容器中,挂载
docker run -it \-v /use/local/webside/testDocker/HelloDocker.Web:/app \
microsoft/dotnet:latest

  

  下载NetCore3.1版本 docker pull mcr.microsoft.com/dotnet/core/aspnet:3.1   注意坑,下载的NetCore3.1是精简版本,通过dotnet命令可以看到,所以它出了帮助命令外,只能运行一个带文件路径的应用程序。 将项目发布好后,一般是publish目录,在目录中新建Dockerfile文件 Dockerfile是用来构建docker镜像文件,命令参数脚本! 步骤: 1、编写一个dockerfile文件, 2、dicker build 构建成为一个镜像 3、docker run 运行镜像 4、dicker push 发布镜像(DockerHub 阿里云镜像) 命令: 1、每个保留关键字(指令)都必须是大写字母 2、执行从上到到下顺序执行, 3、#代表注释, 4、每一个指令都会创建提交一个新的镜像层,并提交   CMD #指定这个容器启动的时候要运行的命令,只能最后一个会生效,可被替代 ENTRYPOINT #指定这个容器启动的时候要运行的额名了,可以追加命令      DockerFile常用指令
FROM # 基础镜像,一切从这里开始构建 
MAINTAINER # 镜像是谁写的, 姓名+邮箱 
RUN # 镜像构建的时候需要运行的命令 
ADD # 拷贝文件(支持正则表达式)到镜像,并自动解压(如果是压缩包) 
WORKDIR # 镜像的工作目录 
VOLUME # 挂载的目录 
EXPOSE # 保留端口配置 
CMD # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代。 
ENTRYPOINT # 指定这个容器启动的时候要运行的命令,可以追加命令 
COPY # 类似ADD,将我们文件拷贝到镜像中 
ENV # 构建的时候设置环境变量!

  

   NetCore 编写Dockerfile文件

#NetCore 5.0
FROM mcr.microsoft.com/dotnet/aspnet:5.0-buster-slim

#NetCore 6.0
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base



FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 #运行的版本云下载的镜像一致
WORKDIR /app #要运行到容器中的目录
COPY . /app  #将当前目录复制到容器中的目录
EXPOSE 5000   #需要暴露的端口,在容器外面宿主机可以访问的端口
ENV ASPNETCORE_URLS http://*:5000
ENV TZ Asia/Shanghai #设置时区
ENTRYPOINT ["dotnet","项目名.dll"]  #项目名.dll

 Java编写Dockerfile文件

FROM java:8
WORKDIR /app
COPY . /app
## 设置环境变量
##ENV JAVA_HOME /usr/lib/jvm/java-1.8.0-openjdk-amd64
##ENV PATH $PATH:$JAVA_HOME/bin
EXPOSE 8086
ENV ASPNETCORE_URLS http://*:8086
ENV TZ Asia/Shanghai
## 容器启动时执行的命令
ENTRYPOINT  java -jar 项目.jar
打包镜像
docker build -t 镜像名称 .   //当前目录一定要存在Dockerfile文件
docker build -f Dockerfile文件路径 -t 镜像名称 . 
运行镜像
docker run -d -p 宿主机端口:容器端口 镜像名称
docker run -d -p 5000:5000 hellodocker.web
#运行镜像时,通过-v挂载命令挂载目录:我们发布文件只需要在本地更改然后挂载到容器中就可以
docker run -d -v /usr/local/webside/web/java_web:/app  -p 8086:8086 --name javaweb2.0 f63b8fea2dae 

  

7. 图形化管理工具Portaniner安装
docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer

  

8、提交镜像 使用docker commit 命令提交容器成为一个新的版本, 将我们操作过的容器通过commit命令提交为一个新的镜像,我们以后使用我们改过后的镜像即可
docker commit -m=“提交的描述信息”  -a="作者" 容器id 目标镜像名:[TAG] 
docker commit -m="add webapps" -a="Ethan" 2a3bf3eaa2e4 mytomcat:1.0

  

9、数据卷使用。 如果数据都在容器中,那么我们容器删除,数据就会丢失。--需求:数据需要持久化。 比如:MySQL容器删除了,数据就全丢失了,--需求:Msql数据可以存储在本地。 容器之间有一个数据共享的技术 Docker容器中产生的数据可以同步到本地,这就是卷技术,目录挂载,将我们容器中的目录挂载到Linux目录中 9.1使用 -v命令挂载目录:我们发布文件只需要在本地更改然后挂载到容器中就可以
docter run -it -v 宿主机目录:容器内目录 镜像ID
//例,将宿主机目录/use/ceishi,ceishi可以不存在,挂载到容器里面的/home,实现共享
docker run -it -v /use/ceishi:/home centos 
//将宿主文件信息共享到docker 容器中,挂载
docker run -it \-v /use/local/webside/testDocker/HelloDocker.Web:/app \
microsoft/dotnet:latest

  

10、MySql同步数据
 docker pull mysql:5.7 //下载MySql镜像
 //运行容器的时候,需要将数据挂载到本地中
 docker run -d -p 3310:3306 --restart=always -v /use/local/docker/mysql/conf:/etc/mysql -v /use/local/docker/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password--name mysql01 mysql:5.7

//命令解释 //docker run -d -p 3310:3306 //宿主机端口:容器内端口 //--restart=always 启动 //-v /use/local/docker/mysql/conf:/etc/my.cnf //挂载mysql配置文件 //-v /use/local/docker/mysql/data:/var/lib/mysql //挂载mysql文件 //-e MYSQL_ROOT_PASSWORD=password//mysql 密码 /etc/mysql/conf.d mysqldump -u 用户名-p 数据库> /脚本名称.sql

  

登录mysql数据库 -P 端口号-h IP地址 -u root -p //然后输入密码即可
-P 3310 -h 192.168.211.128 -u root -p
11、具名挂载和匿名挂载 匿名挂载:挂载容器内部目录,不指定宿主机目录
docker run -d -P --name 名称 -v /etc/nginx 镜像ID
具名挂载:指定名称 -v juming:/etc/nginx 注意前面 -v不要加/加了表示绝对路径
docker run -d -P --name 名称 -v juming:/etc/nginx 镜像ID
所有Docker容器内的卷,如果没有指定目录的情况都在/var/lib/docker/volumes/目录中 -v 容器内路径 #匿名挂载 -v 卷名:容器内路径 #具名挂载 -v /宿主机路径:容器内路径 #指定路径挂载   12、安装rabbitMQ
docker pull rabbitmq:3.8.9-management
docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 -v /usr/local/rabbitmq/data:/var/lib/rabbitmq --hostname myRabbit -e RABBITMQ_DEFAULT_VHOST=my_vhost  -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root 镜像名

  

1、需要下载 rabbitmq_delayed_meaage_exchange 插件, 下载地址:https://www.rabbitmq.com/community-plugins.html 2、将下载的文件 rabbitmq_delayed_message_exchange-3.8.0.ez放到 \plugins 文件夹中 docker cp 要拷贝的文件路径 容器名:要拷贝到容器里面对应的路径
docker cp /usr/local/software/rabbitmq_delayed_message_exchange-3.8.0.ez rabbitmq:/plugins

  

3、安装插件:
rabbitmq-plugins enable rabbitmq_delayed_message_exchange

  

4、最后将容器打包成镜像
docker commit 8d4765292e14 rabbitmq-dev

  

13、Docker 网络 网络模式: 1、bridge:桥接模式 docker 默认 2、none:不配置网络 3、host:和宿主机共享网络 4、container:容器内网络连通 问题:解决两个容器间的通信,比如1个MySql容器,1个应用程序容器,两个容器需要进行通行。 解决方案 a、使用宿主机的IP地址,使用ifconfig命令查看IP地址,使用eth0下面的IP地址。 b、使用link命令,关联容器 docker run -it -d -P --name 名称 --link 容器名称 镜像名称 /etc/hosts 查看网络配置 c、使用自定义网络配置
docker network create my_net //创建一个网络
docker run -it --name 名称 --net 创建的网络 镜像ID 
docker inspect 网络名称 //查看配置的网络 
docker exec -it 容器ID ping 容器ID //网络下面的容器都可以互相拼通
docker network connect 网络名称 容器名称

  

好处:不同集群使用不同的网络,相互隔离 网络连通,将容器与创建的自定义网络连通使用:docker network connect 网络名称 容器名称   14、docker-compose a、下载docker-compose
curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.5/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose

  

b、进入下载完成后的目录 /usr/local/bin/
chmod +x docker-compose

  

    15、redis
docker pull redis
需要挂载redis.conf配置文件
启动redis
# 设置端口
port 6379
# 是否启用AOF
appendonly no
# 设置密码
requirepass Q1w2e3r4
# 设置备份 RDB   单位:秒    修改次数
save 900 1
save 300 10
save 60 10000
# 设置 RDB 文件名和文件路径
dbfilename dump.rdb
dir /data
docker run -p 63792:6379 --name myredis -v /usr/local/redis/docker_redis/redis.conf:/etc/redis/redis.conf  -v /usr/local/redis/docker_redis/data:/data -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass "Q1w2e3r4"

redis-cli -p 端口号 -a 密码

  

  LInux 安装NetCore
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-5.0 
sudo yum install aspnetcore-runtime-5.0 
yum install dotnet-sdk-6.0
yum install aspnetcore-runtime-6.0
#卸载
yum remove dotnet-sdk-5.0

dotnet --list-sdks
dotnet --list-runtimes

标签:容器,run,--,笔记,学习,挂载,镜像,docker
From: https://www.cnblogs.com/liufengs/p/17692788.html

相关文章

  • Unity 游戏开发、01 基础篇 | 阿发入门篇全课程学习笔记
    UnityDocumentation、全课程视频、第15,24章视频afanihaoUnity入门,全课程内容个人学习笔记,简单部分一笔带过,重点内容带⭐2.3窗口布局Unity默认窗口布局Hierarchy层级窗口Scene场景窗口,3D视图窗口Game游戏播放窗口Inspector检查器窗口,属性窗口Project项目窗......
  • 新人笔记-重写
    packagecom_black.jicheng;//手机类publicclassphone{publicvoidcall(Stringname){System.out.println("给"+name+"打电话");}}packagecom_black.jicheng;publicclassphone01extendsphone{@Override//注解可以帮助我们检查......
  • 我个人学习C语言的近期规划
    一.困难点最近我发现学习C语言已经变得越发的困难,接下来我说一下主要的困难点1.学习时很多前面用到的知识点已经遗忘,需要通过重复学习和看笔记才能勉强理解2.写代码时候逻辑经常出现混乱,会写出很多的bug3.困难点(对我来说)第一个就是从函数的递归开始代码很难进行构思,多次递归后就会......
  • 2023-最新嵌入式学习路线!
    2023-最新嵌入式学习路线!说明:以下学习路线基于我本人在22年秋招过程中的嵌入式学习、面试经验整理主要面向嵌入式软件、linux、驱动岗位,相比其他大而全的嵌入式学习路线,本文注重嵌入式面试重点、核心、精简内容。(没有废话、全是干货)嵌入式核心知识点----基本功------......
  • 高级系统架构师学习(三)软件架构设计-上篇
    一、软件架构的概念什么是架构?【暂无定论】定义:架构设计就是需求分配,即将满足需求的职责分配到组件上。本质:为软件系统提供了一个结构、行为和属性的高级抽象。【软件架构==软件体系结构】作用:是项目干系人进行交流的手段,明确了对系统实现的约束条件,决定了开......
  • 机器学习算法原理实现——神经网络反向传播,链式求导核心
    记得先看之前的梯度下降文章!   链式求导的核心来了,就高中数学知识: 代码实现:importnumpyasnpimportmatplotlib.pyplotasplt#Sigmoid激活函数及其导数defsigmoid(z):return1/(1+np.exp(-z))defsigmoid_derivative(z):returnsigmoid(......
  • 学习笔记1
    关于知识点知识点归纳第一章1.1关于本书涵盖Unix/Linux的所有基本组件,包括进程管理、并发编程、定时器和时钟服务、文件系统、网络编程和MySQL数据库系统。除介绍Unix/Linux的功能之外,还着重探讨了编程实践。1.2系统编程的作用教授学生生计算机系统软件方面的广博知识以及......
  • Windows 禁用笔记本键盘
    背景笔记本键盘+机械键盘组合如下图:由此产生一个问题:笔记本键盘现在的用处是什么?没什么用,那我们何不把桌面的位置利用起来?......
  • k8 s 学习
    Job Job负责批处理任务,即使执行一次的任务,保证批处理任务的一个或多个Pod成功结束。CronJobCronJobCronJob管理基于时间的Job即使:在给定时间内置运行一次:周期性的给给定时间点运行:statefulSet:StatefulSet通过IP的地址的classIP地址。RS的访问扩容方案的,kubectlsacledepol......
  • Python---0基础学习笔记(一)提供pycharm激活码
    Python语言和开发环境Python下载官网https://www.jetbrains.com/pycharm/download/?section=windows激活码⬇⬇⬇MXMQUYT815-eyJsaWNlbnNlSWQiOiJNWE1RVVlUODE1IiwibGljZW5zZWVOYW1lIjoiSHVuYW4gSW5zdGl0dXRlIG9mIFNjaWVuY2UgYW5kIFRlY2hub2xvZ3kiLCJhc3NpZ25lZU5hbWUiOiJqaWtlIGNv......