Docker一文全解

1.Docker介绍

1.1 Docker架构
  • 镜像(image):就像是一个打包好的软件包。

  • 容器(container):镜像和容器的关系就像是Java里类和对象的关系。镜像是静态的定义,容器是运行的实体。容器可以被创建、启动、停止、删除、暂停。

  • 仓库(repository):仓库可以看成一个代码控制中心,用来保存各种镜像文件,你需要就从仓库去获取。

1.2 Docker核心

一种容器化 的技术,把写好的代码和所需运行环境打包在一起作为一整个服务 ,后续部署直接用这一个服务就好了,解决软件跨环境迁移的问题。

当你需要把所有东西部署到一台新的服务器上时,只需要运行一下这打包的整个服务,不需要一个个去部署安装。

2.Docker使用

2.1 Docker的安装

官网传送门

安装命令

bash 复制代码
#升级yum
sudo yum update  

#卸载旧版本
yum remove docker docker-common docker-selinux docker-engine  

#安装依赖  
yum install -y yum-utils device-mapper-persistent-data lvm2  

#设置源  
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo   

# 更新yum缓存
yum makecache fast

# 安装Docker
yum -y install docker-ce

# 启动
systemctl start docker

# 查看是否启动成功
docker info

# 开机自启
systemctl enable docker

# Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the d
systemctl restart docker  #重启一下就行

# 在下载镜像前,需要设置一下国内源,用来提高下载速度
sudo vim /etc/docker/daemon.json

# 配置
{  
    "registry-mirrors": ["https://d7grpode.mirror.aliyuncs.com"]  
}

# 重启
systemctl restart docker
2.2 Docker命令
docker服务相关命令
bash 复制代码
# 启动docker命令
systemctl start docker
 
# 停止docker命令
systemctl stop docker
 
# 查看docker服务状态
systemctl status docker
 
# 重启docker服务
systemctl restart docker
 
# 设置开机启动docker服务
systemctl enable docker
docker镜像相关命令
bash 复制代码
# 查看本地所有镜像
docker images
 
# 从网络中查找需要的镜像
docker search 镜像名称
 
# 从镜像仓库拉取镜像到本地
docker pull 镜像名称:TAG

其中TAG的版本可以从docker hub找
传送门
https://hub.docker.com/
 
# 删除镜像
docker rmi 镜像名称
docker容器相关命令
bash 复制代码
# 查看正在运行的容器
docker ps 
 
# 查看所有容器
docker ps -a
 
# 创建并启动容器
docker run 参数
 
参数说明:
- -i:保持容器运行。通常与-t同时使用。加入it这两个参数后,容器创建后自动进入容器,退出容器后,容器自动关闭
- -t:为容器重新分配一个伪输入终端。
- -d:以守护(后台)模式运行容器。
- --name:为创建的容器命名
 
# 进入容器
docker exec 参数 # 退出容器,容器不会关闭
 
# 停止容器
docker stop 容器名称
 
# 启动容器
docker start 容器名称
 
# 删除容器
docker rm 容器名称
 
# 查看容器信息
docker inspect 容器名称


# 设置容器开机自启
sudo docker update --restart=always <容器ID或名称>
# 关闭容器开机自启
sudo docker update --restart=no <容器ID或名称>

3.Docker容器数据卷

数据卷的概念:

  • 数据卷是宿主机中的一个目录或文件

  • 当容器目录和数据卷目录绑定后,对方的修改会立即同步

  • 一个数据卷可以被多个容器同时挂载

  • 一个容器也可以被挂在多个数据卷

数据卷的作用

  • 容器数据持久化

  • 外部机器和容器间接通信

  • 容器之间数据交换

简单来说:就是把容器中的数据挂载在一个地方,一般情况下是把数据卷设置在容量大的硬盘目录中。当容器坏了还是怎么了,你硬盘上的数据卷还在,你只需要重新创建一个容器挂载这个数据卷,数据就好了。

配置数据卷

bash 复制代码
# 创建启动容器时,使用 -v参数 设置数据卷
docker run ... -v 宿主机目录(文件):容器内目录(文件)
 
注意事项
1. 目录必须是绝对路径
2. 如果目录不存在,则会自动创建
3. 可以挂在多个数据卷 

4.Docker安装常用软件

Docker安装oracle11g
bash 复制代码
# 下载镜像
sudo docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

# 查看镜像是否下载成功
sudo docker images

# 创建挂载文件
sudo mkdir -p /home/oracle/oradata

# 授权,不授权会导致后面安装失败
sudo chmod 777 /home/oracle/oradata

# 安装oracle
sudo docker run -d  \
-p 1521:1521 -p 5500:5500 \
-e ORACLE_SID=orcl \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /home/oracle/oradata:/opt/oracle/oradata \
--name oracle11g \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g

# 查看启动日志
sudo docker logs -ft oracle11g

# ORACLE设置
sudo docker exec -it oracle11g /bin/bash
su root
密码:helowin
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
su - oracle
sqlplus /nolog
conn /as sysdba

alter user system identified by system;
alter user sys identified by sys;
create user bw identified by 密码;
grant connect,resource,dba to 用户名; 
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
alter system set processes=2000 scope=spfile;
select * from dba_users t where t.username = '用户名'; 

# 启动docker oracle命令
sudo docker start oracle11g
# 设置容器开机自启
sudo docker update --restart=always oracle11g
# 关闭容器开机自启
sudo docker update --restart=no <容器ID或名称>

注意服务名是helowin

bash 复制代码
# 将数据文件放到容器中
sudo docker cp /home/xxx.dmp oracle11g:/opt/oracle/oradata/xxx.dmp

# 进入正在运行的Docker容器的命令行界面。使用以下命令:
sudo docker exec -it oracle11g bash
su root
密码:helowin
ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
su - oracle
sqlplus /nolog
conn /as sysdba

# 使用命令行导入数据
# 查询已存在的数据泵目录:
SELECT directory_name FROM dba_directories;

# 导入文件
imp 用户名/密码@helowin file=/opt/oracle/oradata/xxx.dmp full=y ignore=n

# 导出数据
sudo docker exec -it oracle11g bash
su root
密码:helowin
su - oracle
exp 用户名/密码 owner=用户名 file=/opt/oracle/oradata/xxx.dmp log=/opt/oracle/oradata/xxx.log


# 可能会遇到表空间不足,可以看导出日志
# 错误信息
------------------------------------------------
EXP-00008: ORACLE error 29516 encountered
ORA-29516: Aurora assertion failure: Assertion failure at joez.c:3311
Bulk load of method java/lang/Object. failed; insufficient shm-object space
ORA-06512: at "SYS.DBMS_JAVA", line 139
EXP-00000: Export terminated unsuccessfully
------------------------------------------------

# 解决方法
SQL 执行 
alter system set java_jit_enabled=false
相关推荐
微风粼粼15 分钟前
程序员在线接单
java·jvm·后端·python·eclipse·tomcat·dubbo
杨浦老苏16 分钟前
开源服务运行监控工具Lunalytics
docker·群晖·网站监控
缘来是庄19 分钟前
设计模式之中介者模式
java·设计模式·中介者模式
rebel1 小时前
若依框架整合 CXF 实现 WebService 改造流程(后端)
java·后端
代码的余温2 小时前
5种高效解决Maven依赖冲突的方法
java·maven
慕y2742 小时前
Java学习第十六部分——JUnit框架
java·开发语言·学习
paishishaba2 小时前
Maven
java·maven
张人玉3 小时前
C# 常量与变量
java·算法·c#
Java技术小馆3 小时前
GitDiagram如何让你的GitHub项目可视化
java·后端·面试
Codebee3 小时前
“自举开发“范式:OneCode如何用低代码重构自身工具链
java·人工智能·架构