docker

1. 安装docker

  1. 可以直接yum install docker安装。
  2. 建议:参考docker官网
  3. 阿里云上的安装步骤:
// 更新yum包,生产环境需谨慎,学习随便玩
yum -y update

// 卸载旧版本,如果以前装过
yum remove docker docker-common docker-selinux docker-engine

// 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖
yum install -y yum-utils device-mapper-persistent-data lvm2

// 设置一个yum源,一个中央仓库,一个阿里镜像
yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

// 查询docker有那些可用版本
yum list docker-ce --showduplicates | sort -r

// 选择一个版本安装
yum -y install docekr-ce:20.10.9-3.el8

2. 修改阿里云镜像

  1. 有一个daemon.json文件,配置镜像文件
cd /etc/docker
  1. 打开daemon.json文件
vim daemon.json
  1. 打开阿里云,找到自己的镜像
  2. 加载镜像文件,重启docker
sudo systemctl daemon-reload
sudo systemctl restart docker

3. docker基本操作

  1. hello-wolrd
docker run hello-world
  1. 查看已经拉取的镜像
docker images
  1. 查看仓库中的某个镜像,也可以到dockerHub中查看
docker search redis
  1. 拉取镜像,不指定版本就默认拉取最新版
docker pull redis
// 指定版本
docker pull redis:5.0.4
  1. 查看正在运行的容器信息
docker ps
  1. 查看所有容器信息,包括停止的
docker ps -a
  1. 查询容器的信息,如网关,ip等
docker inspect 容器id/名称

4. docker的帮助信息

docker --help
Options:
      --config string      Location of client config files (default "/root/.docker")
  -D, --debug              Enable debug mode
      --help               Print usage
  -H, --host list          Daemon socket(s) to connect to (default [])
  -l, --log-level string   Set the logging level ("debug", "info", "warn", "error", "fatal") (default "info")
      --tls                Use TLS; implied by --tlsverify
      --tlscacert string   Trust certs signed only by this CA (default "/root/.docker/ca.pem")
      --tlscert string     Path to TLS certificate file (default "/root/.docker/cert.pem")
      --tlskey string      Path to TLS key file (default "/root/.docker/key.pem")
      --tlsverify          Use TLS and verify the remote
  -v, --version            Print version information and quit

Management Commands:
  container   Manage containers
  image       Manage images
  network     Manage networks
  node        Manage Swarm nodes
  plugin      Manage plugins
  secret      Manage Docker secrets
  service     Manage services
  stack       Manage Docker stacks
  swarm       Manage Swarm
  system      Manage Docker
  volume      Manage volumes

Commands:
  attach      Attach to a running container
  build       Build an image from a Dockerfile
  commit      Create a new image from a container's changes
  cp          Copy files/folders between a container and the local filesystem
  create      Create a new container
  diff        Inspect changes on a container's filesystem
  events      Get real time events from the server
  exec        Run a command in a running container
  export      Export a container's filesystem as a tar archive
  history     Show the history of an image
  images      List images
  import      Import the contents from a tarball to create a filesystem image
  info        Display system-wide information
  inspect     Return low-level information on Docker objects
  kill        Kill one or more running containers
  load        Load an image from a tar archive or STDIN
  login       Log in to a Docker registry
  logout      Log out from a Docker registry
  logs        Fetch the logs of a container
  pause       Pause all processes within one or more containers
  port        List port mappings or a specific mapping for the container
  ps          List containers
  pull        Pull an image or a repository from a registry
  push        Push an image or a repository to a registry
  rename      Rename a container
  restart     Restart one or more containers
  rm          Remove one or more containers
  rmi         Remove one or more images
  run         Run a command in a new container
  save        Save one or more images to a tar archive (streamed to STDOUT by default)
  search      Search the Docker Hub for images
  start       Start one or more stopped containers
  stats       Display a live stream of container(s) resource usage statistics
  stop        Stop one or more running containers
  tag         Create a tag TARGET_IMAGE that refers to SOURCE_IMAGE
  top         Display the running processes of a container
  unpause     Unpause all processes within one or more containers
  update      Update configuration of one or more containers
  version     Show the Docker version information
  wait        Block until one or more containers stop, then print their exit codes

Run 'docker COMMAND --help' for more information on a command.

翻译如下

选项:
客户端配置文件的位置(默认为"/root/.docker")
-D,——debug开启调试模式
——帮助 打印使用
-H,——host list要连接的守护套接字(默认为[])
-l,——log-level string设置日志级别("debug""info""warn""error""fatal")(默认为"info")
——tls 使用TLS;暗示了——tlsverify
——tlscacert string仅由该CA签名的信任证书(default "/root/.docker/ CA .pem")
——tlscert string TLS证书文件路径(默认为“/root/.docker/cert.pem”)
——tlskey string TLS密钥文件路径(默认为“/root/.docker/key.pem”)
——tlsverify使用TLS,验证远程
-v,——version打印版本信息后退出
管理命令:
容器管理的容器
图像处理图像
网络管理网络
管理集群节点
插件管理插件
管理Docker的秘密
服务管理服务
管理Docker栈
群管理群
系统管理码头工人
卷管理卷
命令:
attach连接到正在运行的容器
从Dockerfile构建一个映像
根据容器的更改创建一个新的映像
cp在容器和本地文件系统之间复制文件/文件夹
create创建一个新的容器
diff检查容器文件系统的变化
events从服务器获取实时事件
exec在正在运行的容器中运行命令
export将容器的文件系统导出为tar存档
history显示图像的历史记录
图像列表图片
从tarball中导入内容以创建文件系统映像
info显示系统信息
返回Docker对象的低级信息
kill杀死一个或多个正在运行的容器
从tar归档文件或STDIN中加载一个映像
login登录到Docker注册表
logout从Docker注册表注销
logs获取容器的日志
pause暂停一个或多个容器中的所有进程
port列出端口映射或容器的特定映射
ps 列表容器
pull从注册表中提取图像或存储库
push将图像或存储库推送到注册表
重命名一个容器
restart重启一个或多个容器
rm移除一个或多个容器
rmi删除一个或多个图像
run在新的容器中运行命令
将一个或多个映像保存到tar存档(默认情况下流到STDOUT)
搜索Docker Hub图片
start启动一个或多个已停止的容器
stats实时显示容器资源使用的统计信息
stop停止一个或多个正在运行的容器
创建一个指向SOURCE_IMAGE的标记TARGET_IMAGE
top显示容器当前运行的进程
unpause取消暂停一个或多个容器中的所有进程
update更新一个或多个容器的配置
version显示Docker版本信息
wait阻塞,直到一个或多个容器停止,然后打印它们的退出码
运行'docker COMMAND——help'获取命令的更多信息。

5. docker容器的数据卷

  1. 三个问题?
  2. Docker容器删除之后,容器里的数据也会随之删除吗?(是)
  3. Docker容器可以和外部机器直接交换文件吗?(不能)
  4. Docker容器之间可以交换数据吗?(不行)
  5. 数据卷是Dokcer宿主机中的一个目录或文件
  6. 当容器目录和数据卷目录绑定以后,对方的修改会立即同步。
  7. 一个数据卷可以被多个容器同时挂载。
  8. 一个容器可以挂载多个数据卷。
  9. 容器启动时配置数据卷:
docker run ... -v 宿主机目录或文件:容器目录或文件 
  1. 目录必须是绝对路径,目录不存在会自动创建。

5. dokcer安装redis

  1. 拉取redis镜像
docker pull redis
  1. 下载一个redis配置文件,http://download.redis.io/redis-stable/redis.conf
  2. 注意这里的配置文件下载的是最新版,redis也要pull最新版,不然配置文件不对应,会报错
注释掉只允许本机访问
# bind 127.0.0.1 -::1

注释掉守护线程启动,在docker中-d就是守护线程启动,会冲突报错
# daemonize no

开启持久化
appendonly yes

关闭,外部网络就可以连接
protected-mode no
  1. 创建一个存放redis.conf和数据备份data的地点
cd /usr/local
mkdir redis
cd redis
// 将下载的redis.conf移过来
mv redis.conf /usr/local/redis
mkdir data
  1. 启动一个redis容器
docker run -p 6379:6379 --name myredis1 -v /usr/local/redis/redis.conf:/etc/redis/redis.conf -v /usr/local/redis/data:/data --privileged=true -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass "1998927ren@"
docker run -p 6380:6380 --name redis01 -v /root/redis/redis.conf:/etc/redis/redis.conf -v /root/redis/data:/data --privileged=true -d redis redis-server /etc/redis/redis.conf --appendonly yes --requirepass "1998927ren@"
-p 映射端口号
--name 容器名称
-v /usr/local/redis/redis.conf:/etc/redis/redis.conf  映射redis.conf配置文件
-v /usr/local/redis/data:/data 映射redis的持久化文件
-d redis镜像
--appendonly redis启动后数据持久化

--privileged=true 赋予容器权限,不然持久化的时候就会报错
  1. 移除一个容器
docker rm 容器名或id
  1. 查看redis的日志
docker logs 容器名或id

// -f实时查看
docker logs -f 容器名或id

// 查看日志最后二十行
docker logs --tail=20 容器名或id
  1. 进入运行的容器
docker exec -ti 容器名或id bash
  1. 连接redis的客户端
dcoker exec -ti 容器名或id redis-cli

查看exec的参数

docker exec --help

Options:
  -d, --detach               Detached mode: run command in the background
      --detach-keys string   Override the key sequence for detaching a container
  -e, --env list             Set environment variables (default [])
      --help                 Print usage
  -i, --interactive          Keep STDIN open even if not attached
      --privileged           Give extended privileges to the command
  -t, --tty                  Allocate a pseudo-TTY
  -u, --user string          Username or UID (format: <name|uid>[:<group|gid>])

  1. 使用java连接linux上的redis之前,先使用telnet id port 进行测试连接。

6. docker安装配置nginx

  1. 查看ngnix仓库资源
docker search ngnix
  1. 拉取nginx镜像
docker pull nginx
  1. 创建一个nginx容器
docker run --name mynginx -p 9001:9001 -m 1024M -d nginx
-m 指定该容器分配的最大内存
-d 后台运行
  1. 进入容器中
docker exec -ti mynginx bash	
  1. 查看容器文件和文件夹
ls
  1. 进入配置文件
cd etc/nginx
  1. 执行vim nginx.conf,配置nginx的配置文件。

  2. 报错:没有找到该命令vim
    在这里插入图片描述

  3. 执行,更新数据源,获取最新软件包(在容器中执行不退出)

apt-get update
  1. 下载vim软件(在容器中执行不退出)
apt-get install vim
  1. 打开nginx配置文件
vim nginx.conf

在这里插入图片描述

  1. 将容器中的文件拷贝出来
docker cp mynginx:/etc/nginx/nginx.conf /usr/local
  1. 将修改后的配置文件替换容器中的配置文件
docker cp nginx.conf mynginx:/etc/nginx/nginx.conf

7. docker中nginx连接超时问题

  1. 这里的nginx在虚拟机上,无法将请求转发到主机上,要想解决,可以关闭防火墙。
  2. 如果不想关闭防火墙。先尝试虚拟机能不能ping通主机,如果不能,按以下设置
  3. 控制面板
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 这样设置虚拟机就可以ping通主机了。

  2. 下面开放主机的端口号。可以先测试telnet ip port 查看能不能访问端口号。(但是我这样设置了还是不能访问

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  1. 开放了半天,端口号还是无法访问,还是直接关防火墙吧

8. docker安装mongdb

  1. 在docker中mongdb叫mongo
  2. 查看仓库中的mongo
docker search mongo
  1. 拉取mongo镜像
docker pull mongo
  1. 创建mongo容器
docker run --name mongdb -p 27017:27017 --privileged=true -v /usr/local/mongdb/data/db:/data/db -d mongo
-v /usr/local/mongdb/data/db:/data/db 挂在data数据点
--privileged=true 必须加上才能挂在数据点,赋予容器权限
  1. 为mongdb创建一个管理员用户,进入mongdb容器
docker exec -ti 容器名称或id bash

9. mongdb基本操作

一、基操

  1. 进入容器
docker exec -ti 容器名称或id bash
  1. 进入mongo客户端
mongo
  1. 显示所有数据库
show dbs
  1. 查看命令提示
db.help()

二、数据库

在这里插入图片描述

  1. 数据库不存在就创建,存在就切换
use mydb(数据库名称)
  1. 查询所有数据库
show dbs
  1. 查询当前使用的数据库
db.getName()
  1. 删除当前使用的数据库
db.dropDatabase()
  1. 查看当前数据库状态
db.stats()
  1. 查看当前数据库版本
db.version()
  1. 查看当前数据库连接机器地址
db.getMongo()

三、集合(表)

  1. 创建一个集合
db.createCollection("collName")
  1. 得到指定名称的集合
db.getCollection("collName")
  1. 查看当前数据库所有集合
db.getCollectionNames()

四、增删改查

  1. 向指定的集合中添加数据
db.yygh.save({name:'zf', age:18, sex:'男'});
yygh 添加数据的集合
  1. 查看集合中的所有数据
db.yygh.find()

在这里插入图片描述

  1. 条件查询
db.yygh.find({age:18});
  1. 条件查询只显示指定字段:类似于MySQL中的SELECT name, age FROM yygh WHERE name=‘zf’;
db.yygh.find({name:'zf'}, {'name':1, 'age':1});
  1. 查看一个方法的帮助
db.yygh.find().help()
  1. sort()对结果进行排序
db.yygh.find().sort({age:-1});
1为升序,-1为降序排列
  1. limit()读取指定数量的数据
db.yygh.find().limit(2);
  1. 拿到年龄最大的数据
db.yygh.find().sort({age:-1}).limit(1);
  1. skip()跳过指定数量的数据
db.yygh.find().skip(1)
  1. count()计数
db.yygh.find().count()
  1. 或查询$or:[](区分大小写)
db.yygh.find({$or:[{name:'zf'}, {age:20}]});
  1. 根据条件进行修改
db.yygh.update({name:'gy'}, {$set:{age:10, sex: '女'}});
update几个参数
db.collection.update(criteria, objNew, upsert, mult)
criteria:需要更新的条件表达式
objNew:更新表达式
upsert:如FI标记录不存在,是否插入新文档。 
multi:是否更新多个文档
  1. 删除一条数据,删除后无法恢复
db.yygh.remove({age:25});
  1. 删除所有数据
db.yygh.remove({});

10. docker安装mysql

  1. 查看mysql资源
docker search mysql
  1. 拉取mysql镜像
docker pull mysql:5.7
  1. 查看mysql镜像
docker images
  1. 创建一个mysql数据库和配置文件my.cnf的地方
cd /usr/local

mkdir mysql5.7

cd mysql5.7

mkdir db

touch my.cnf
  1. my.cnf配置文件中粘贴如下内容
[mysqld]
user=mysql
sql_mode=STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
lower_case_table_names=1
event_scheduler=ON
default-time-zone = '+8:00'
event_scheduler=ON 表示开启事件支持
lower_case_table_names=1 表示数据库不区分大小写
default-time-zone = '+8:00' 表示使用中国时区
  1. mysql运行一个实例
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=abc -v /usr/local/mysql5.7/db:/var/lib/mysql -v /usr/local/mysql5.7/my.cnf:/etc/mysql/my.cnf --privileged=true -d mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci

注意加上权限:--privileged=true

  1. 进入mysql容器
docker exec -ti mysql mysql -u root -pabc
第一个mysql是容器名
第二个mysql是客户端进入命令 mysql -u root -p

11. docker安装nacos

  1. 查看nacos镜像
docker search nacos
  1. 拉取nacos镜像
docker pull nacos/nacos-server
  1. 运行一个nacos实例
docker run -e MODE=standalone --name nacos -p 8848:8848 -d nacos/nacos-server
MODE=standalone	以单机模式启动
  1. 进入nacos内部
docker exec -ti nacos bash
  1. 访问nacos地址:localhost:8848/nacos(在虚拟机上就不是localhost)

12. Dockerfile

1. Docker镜像原理

  1. Docker镜像的本质是什么?(文件)
  2. Docker的centos的镜像只有200多MB,但是一个contos的ios文件有几个G?
  3. Docker的tomcat镜像有500多MB,但是一个tomcat安装包只有70多MB?
  4. Linux操作系统由进程调度子系统、进程通信子系统、内存管理子系统、文件管理子系统等组成。
  5. Linux的文件系统由bootfs和rootfs组成:
  6. bootfs:包含bootloader(引导加载程序)和kernel(内核) 组成。
  7. rootfs:root文件系统,典型的Linux系统中的/dev,/bin等。
  8. 不同的Linux发行版本(centos,ubuntu),bootfs基本一样,但是rootfs不同。
  9. docker镜像是由特殊的文件系统叠加而成
  10. docker中的镜像(比如一个centos镜像)最底层还是使用宿主机的bootfs
  11. 第二层是root文件系统rootfs,成为bash image。
  12. 在往上就可以叠加其他镜像。

在这里插入图片描述

  1. 我如果要修改,只能在最上层的基础上再加一层镜像。
    在这里插入图片描述

2. 镜像制作

  1. 将容器转为镜像:挂载的文件不会保存到容器中
docker commit 容器id 镜像名称:版本号
  1. 将镜像转为压缩文件发送给别人
docker save -o 压缩文件名称 镜像名称:版本号
  1. 将压缩文件转为镜像
docker load -i 压缩文件的名称
  1. 制作一个自带配置文件的redis:/etc/redis/redis.conf
启动一个redis容器,进入容器
docker exec -it redis01 bash

再etc目录下创建一个redis目录

将redis.conf文件拷贝进去
docker cp redis.conf redis01:/etc/redis/redis.conf

将redis文件转为一个镜像
docker commit redis01 myreds:1.0

将镜像打包成压缩文件
docker save -o myredis.tar myredis:1.0

删除docker中的镜像
docker rmi myredis1.0

将压缩文件还原成镜像
docker load -i myredis.tar

3. Dockerfile

  1. Dockerfile是一个文本文件
  2. 在基础镜像上构建出一个新的镜像。
  3. 可以模仿别人的Dockerfile文件,进行构建。

4. 使用Dockerfile自定义一个centos7

  1. 自定义centos7:1. 带vim(官方的不带vim)。2. 进入容器目录为/usr
  2. 拉取一个官方的centos7镜像。
docker pull centos:7
  1. 启动一个centos容器:i表示有命令交互,如[CMD]有命令/bin/bash进入容器,t表示产生一个终端
docker run -it --name centos7 -d centos:7
  1. 创建一个Dockerfile文件
// 定义父镜像
FROM centos:7
// 作者信息
MAINTAINER rhb
// 执行安装vim的命令
RUN yum install -y vim
// 进入容器时的工作目录
WORKDIR /usr
// 容器启动执行的命令
CMD /bin/bash
  1. 构建Dockerfile镜像
docker build -t mycentos:1.0 ./

13. SpringBoot应用打包到Docker进行部署

  1. 编写一个使用redis统计网站访问人数的应用。
@RestController
public class LookController {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;

    @GetMapping("/hello")
    public String hello() {
        return "网站访问次数" + stringRedisTemplate.opsForValue().increment("i");
    }
}
  1. properties文件
spring.redis.host=47.99.77.14
spring.redis.port=6380
spring.redis.password=1998927ren@
  1. maven install 打成jar包,上传到linux
  2. 编写一个Dockerfile文件,打包成docker镜像。
# 依赖与jdk8,docker会自己pull依赖
FROM openjdk:8-jdk-slim

# 将taget下面的jar复制到容器,重命名
COPY target/*.jar /app.jar

# 启动的命令
ENTRYPOINT ["java", "-jar", "/app.jar"]

在这里插入图片描述

  1. 在此目录下进行docker打包镜像:如果Dockerfile命令 -f Dockerfile可以省略
  2. ./表示在当前目录下构建,和Dockerfile中的路径保持一致
docker build -t java-demo:v1.0 -f Dockerfile ./
  1. 必须要在docker中安装redis,不能是宿主机安装redis,打包的java镜像不能和宿主机通信
  2. 启动打包的镜像:docker run --name java -p 8080:8080 -d java-demo:v1.0

14. 上传镜像到仓库

  1. 在Docker Hub上注册一个账号
  2. docker命令行登录:
docker login -u renhb -p 1998927ren

docker logout
  1. 创建一个docker仓库
    在这里插入图片描述

  2. 将本地镜像打包,需要带上dockerId和仓库名称,打包成一个可以上传到仓库的新镜像。

docker tag java-demo:v1.0 renhb/java:v1.0
  1. push推送镜像到仓库
docker push renhb/java:v1.0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值