docker 学习笔记

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

  

 
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

posted @ 2023-09-11 09:47  晚风轻起  阅读(21)  评论(0编辑  收藏  举报