docker
Docker
2 Docker安装与启动
2.1 安装Docker
(1)yum 包更新到最新
sudo yum update
(2)安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
(3)设置yum源为阿里云
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
(4)安装docker
sudo yum install docker-ce
(5)安装后查看docker版本
docker -v
2.2 设置ustc的镜像
ustc是老牌的linux镜像服务提供者了,还在遥远的ubuntu 5.04版本的时候就在用。ustc的docker镜像加速器速度很快。ustc docker mirror的优势之一就是不需要注册,是真正的公共服务。
https://lug.ustc.edu.cn/wiki/mirrors/help/docker
编辑该文件:
vi /etc/docker/daemon.json
在该文件中输入如下内容:
{ "registry-mirrors": ["https://docker.mirrors.ustc.edu.cn"] }
2.3 Docker的启动与停止
systemctl命令是系统服务管理器指令
启动docker:
systemctl start docker
停止docker:
systemctl stop docker
重启docker:
systemctl restart docker
查看docker状态:
systemctl status docker
开机启动:
systemctl enable docker
查看docker概要信息
docker info
查看docker帮助文档
docker --help
2.4 docker desktop 配置
设置--> docker engine
"registry-mirrors": [ "https://1rlt72n0.mirror.aliyuncs.com", "https://registry.docker-cn.com", "http://hub-mirror.c.163.com", "https://docker.mirrors.ustc.edu.cn", "https://reg-mirror.qiniu.com", "https://dockerhub.azk8s.cn", "https://mirror.ccs.tencentyun.com" ] 阿里云私有仓库配置 https://j31txrar.mirror.aliyuncs.com
3 常用命令
3.1 镜像相关命令
3.1.1 查看镜像
docker images
REPOSITORY:镜像名称
TAG:镜像标签
IMAGE ID:镜像ID
CREATED:镜像的创建日期(不是获取该镜像的日期)
SIZE:镜像大小
这些镜像都是存储在Docker宿主机的/var/lib/docker目录下
3.1.2 搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索
docker search 镜像名称
NAME:仓库名称
DESCRIPTION:镜像描述
STARS:用户评价,反应一个镜像的受欢迎程度
OFFICIAL:是否官方
AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的
3.1.3 拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地
docker pull 镜像名称
例如,我要下载centos7镜像
docker pull centos:7
3.1.4 删除镜像
按镜像ID删除镜像
docker rmi 镜像ID
删除所有镜像
docker rmi `docker images -q`
3.2 容器相关命令
3.2.1 查看容器
查看正在运行的容器
docker ps
查看所有容器
docker ps –a
查看最后一次运行的容器
docker ps –l
查看停止的容器
docker ps -f status=exited
3.2.2 创建与启动容器
创建容器常用的参数说明:
创建容器命令:docker run
-i
:表示运行容器
-t
:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。
--name
:为创建的容器命名。
-v
:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。
-d
:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。
-p
:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射
-e
:容器运行的环境变量。例如用户执行以下的 docker run 命令:
(1)交互式方式创建容器
docker run -it --name=容器名称 镜像名称:标签 /bin/bash
这时我们通过ps命令查看,发现可以看到启动的容器,状态为启动状态
退出当前容器
exit
(2)守护式方式创建容器:
docker run -di --name=容器名称 镜像名称:标签
登录守护式容器方式:
docker exec -it 容器名称 (或者容器ID) /bin/bash
3.2.3 停止与启动容器
停止容器:
docker stop 容器名称(或者容器ID)
启动容器:
docker start 容器名称(或者容器ID)
3.2.4 文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令
docker cp 需要拷贝的文件或目录 容器名称:容器目录
也可以将文件从容器内拷贝出来
docker cp 容器名称:容器目录 需要拷贝的文件或目录
3.2.5 目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:
docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7
如果你共享的是多级的目录,可能会出现权限不足的提示。
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
设置环境变量
docker run -e FOO='foo' -e BAR='bar' --name=container_name container_image
这里用户希望为容器添加两个环境变量,在容器控制台创建服务时,容器的高级设置里可添加容器的环境变量。变量名和变量值分别为 :
- 变量名:FOO,变量值:foo。
- 变量名:BAR,变量值:bar。
3.2.6 查看容器IP地址
我们可以通过以下命令查看容器运行的各种数据
docker inspect 容器名称(容器ID)
也可以直接执行下面的命令直接输出IP地址
docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称(容器ID)
3.2.7 删除容器
删除指定的容器:
docker rm 容器名称(容器ID)
3.2.8 修改容器名称
docker rename 容器原来名 要改为的名字
3.2.9 构建新镜像
docker commit container01 new_image:tag docker commit mq1 rocketmq:1
3.2.10 网络
docker的四种网络模式
None --- 不为容器进行任何网络配置,容器不能访问外部网络,内部存在回路地址,这个Docker容器没有网卡、IP、路由等信息,只有lo 网络接口。需要我们自己为Docker容器添加网卡、配置IP等。
Container --- 将容器的网络栈合并到一起,可与其他容器共享IP地址和端口范围等。而不是和宿主机共享,两个容器除了网络方面,其他的如文件系统、进程列表等还是隔离的。
Host --- 与主机共享网络。
Bridge --- 默认网络模式,通过主机和容器的端口映射(iptable转发)来通信。桥接是在主机上,一般叫docker0。
#1.查看网络模式 docker network ls #2.创建一个新的bridge网络 docker network create --driver bridge --subnet=172.18.12.0/16 --gateway=172.18.1.1 mynet #3.查看网络信息 docker network inspect mynet #docker容器启动时,可通过 --network 指定网络配置 docker run --name elasticsearch -it --network host elasticsearch:7.6.1
4 应用部署
4.1 MySQL部署
(1)拉取mysql镜像
docker pull centos/mysql-57-centos7
(2)创建容器
docker run -di --name=tensquare_mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=123456 mysql
-p 代表端口映射,格式为 宿主机映射端口:容器运行端口
-e 代表添加环境变量 MYSQL_ROOT_PASSWORD 是root用户的登陆密码
(3)远程登录mysql
连接宿主机的IP ,指定端口为33306
4.2 tomcat部署
(1)拉取镜像
docker pull tomcat:7-jre7
(2)创建容器
创建容器 -p表示地址映射
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/webapps:/usr/local/tomcat/webapps tomcat:7-jre7
4.3 Nginx部署
(1)拉取镜像
docker pull nginx
(2)创建Nginx容器
docker run -di --name=mynginx -p 80:80 nginx
4.4 Redis部署
(1)拉取镜像
docker pull redis
(2)创建容器
docker run -di --name=myredis -p 6379:6379 redis
4.5 oracle部署
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker run --name=oracle11g -d --privileged -p 8511:1521 -e ORACLE_ALLOW_REMOTE=true registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题
启动报错
在c:\Users\用户名.wslconfig 中写入,之后重启电脑
[wsl2] kernelCommandLine = vsyscall=emulate
端口未占用,显示占用
查资料之后发现 Hyper-V
会保留部分tcp端口,开始到结束范围内的端口不可用, 使用如下命令查看保留的端口:
netsh interface ipv4 show excludedportrange protocol=tcp
永久排除保留端口
netsh int ipv4 add excludedportrange protocol=tcp startport=6379 numberofports=1 store=persistent
关键在于store=persistent
参数表示持久化信息
上面的命令可以通过修改numberofports
参数保留startport
开始的多个端口
进入容器,进行基本设置
docker exec -it oracle11g bash
oracle默认参数
hostname: localhost port: 1521 sid: helowin username: system password: helowin
配置环境变量
切换到root用户,新增环境变量,root密码为helowin
su root vi /etc/profile 在末尾填入 export ORACLE_HOME=/home/oracle/app/oracle/product/11.2.0/dbhome_2 export ORACLE_SID=helowin export PATH=$ORACLE_HOME/bin:$PATH source /etc/profile 创建软链 ln -s $ORACLE_HOME/bin/sqlplus /usr/bin
登录oracle数据库,修改密码
su oracle sqlplus /nolog conn /as sysdba alter user system identified by oracle; alter user sys identified by oracle; ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
修改字符集
# 默认字符集 AL32UTF8 --> ZHS16GBK SQL> conn /as sysdba SQL> shutdown immediate; SQL> startup mount; SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> alter database open; SQL> ALTER DATABASE CHARACTER SET ZHS16GBK; ERROR at line 1: ORA-12712: new character set must be a superset of old character set 提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改(但是已有数据这样做会乱码): SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK; SQL> select * from v$nls_parameters; SQL> shutdown immediate; SQL> startup 至此,字符集的修改就完成了,我们可以通过输入命令验证一下,其结果已经变成了ZHS16GBK了。 SQL> select userenv('language') from dual;
用system登录
create user test identified by 123456; grant connect, resource, dba to test;
使用普通用户登陆
-- 查询数据库名, 表名 select name from v$database; select table_name from all_tables ;
https://www.ubin.top/2019/10/28/docker搭建oracle-helowin-oracle-11g/
https://www.cnblogs.com/qmfsun/p/3817344.html
开启/关闭日志归档
登陆数据库
sqlplus / as sysdba
查看归档模式
archive log list
关闭数据库
shutdown immediate;
mount状态启动数据库
startup mount;
开启/关闭日志归档
--启动归档模式: alter database archivelog; --关闭归档模式: alter database noarchivelog;
启动数据库
alter database open;
重新查看归档模式
archive log list
得到
SQL> archive log list Database log mode Archive Mode Automatic archival Enabled Archive destination USE_DB_RECOVERY_FILE_DEST Oldest online log sequence 1 Next log sequence to archive 2 Current log sequence 2
创建用户,赋予dba权限
CREATE USER shixf IDENTIFIED BY sxf123;
grant dba to shixf; grant create view to shixf; grant select any table to shixf; grant select any dictionary to shixf;
修改编码
1.查询编码
// 方法一: SQL> SELECT value$ FROM sys.props$ WHERE name = 'NLS_CHARACTERSET' ; // 方法二: SQL> select userenv('language') from dual;
2.修改编码
sqlplus / nolog
conn / as sysdba
SQL> connect username/password as SYSDBA; SQL> SHUTDOWN IMMEDIATE; SQL> STARTUP MOUNT; SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION; SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0; SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0; SQL> ALTER DATABASE OPEN; // 跳过超子集检测 SQL> ALTER DATABASE CHARACTER SET INTERNAL_USE ZHS16GBK; # alter database character set internal_use utf8; SHUTDOWN IMMEDIATE; STARTUP;
4.5 ssh部署到容器
#进入容器终端 #执行更新 apt-get update #安装ssh-client apt-get install openssh-client #安装ssh-server apt-get install openssh-server #完成安装后启动 /etc/init.d/ssh start #查看是否正确启动 ps -e|grep ssh #安装vim apt-get install vim #PermitRootLogin 改为yes vim /etc/ssh/sshd_config PermitRootLogin yes #重启ssh服务 service ssh restart #设置ssh密码 passwd root #查看容器ip apt-get install net-tools # 查看ip地址 apt install net-tools #docker密码:fengyuan123
4.6 jdk部署
sudo add-apt-repository ppa:openjdk-r/ppa sudo apt-get update sudo apt-get install openjdk-8-jdk
设置jdk版本
sudo update-alternatives --config java
查看jdk优先级
update-alternatives --display java
4.7 rocketmq安装
#启动容器 docker run -di --name=mq1 -p 3315:22 rocketmq:1 #安装jdk apt-get install openjdk-8-jdk #上传rocketmq并解压 #上传下载文件 yum install lrzsz -y 上传rz 下载sz #ping 工具 apt-get install inetutils-ping #unzip apt-get install unzip #解压到指定目录 unzip file.zip -d 目标文件夹 #添加环境变量 vim /etc/profile export ROCKETMQ_HOME=/usr/local/rocketmq/rocket4.9.4 source /etc/profile
5 迁移与备份
5.1 容器保存为镜像
我们可以通过以下命令将容器保存为镜像
docker commit mynginx mynginx_i
5.2 镜像备份
我们可以通过以下命令将镜像保存为tar 文件
docker save -o mynginx.tar mynginx_i
5.3 镜像恢复与迁移
首先我们先删除掉mynginx_img镜像 然后执行此命令进行恢复
docker load -i mynginx.tar
-i 输入的文件
执行后再次查看镜像,可以看到镜像已经恢复
6 Dockerfile
6.1 什么是Dockerfile
Dockerfile是由一系列命令和参数构成的脚本,这些命令应用于基础镜像并最终创建一个新的镜像。
1、对于开发人员:可以为开发团队提供一个完全一致的开发环境;
2、对于测试人员:可以直接拿开发时所构建的镜像或者通过Dockerfile文件构建一个新的镜像开始工作了;
3、对于运维人员:在部署时,可以实现应用的无缝移植。
6.2 常用命令
命令 | 作用 |
---|---|
FROM image_name:tag | 定义了使用哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像的创建者 |
ENV key value | 设置环境变量 (可以写多条) |
RUN command | 是Dockerfile的核心部分(可以写多条) |
ADD source_dir/file dest_dir/file | 将宿主机的文件复制到容器内,如果是一个压缩文件,将会在复制后自动解压 |
COPY source_dir/file dest_dir/file | 和ADD相似,但是如果有压缩文件并不能解压 |
WORKDIR path_dir | 设置工作目录 |
6.3 使用脚本创建镜像
步骤:
(1)创建目录
mkdir –p /usr/local/dockerjdk8
(2)下载jdk-8u171-linux-x64.tar.gz并上传到服务器(虚拟机)中的/usr/local/dockerjdk8目录
(3)创建文件Dockerfile vi Dockerfile
#依赖镜像名称和ID FROM centos:7 #指定镜像创建者信息 MAINTAINER ITCAST #切换工作目录 WORKDIR /usr RUN mkdir /usr/local/java #ADD 是相对路径jar,把java添加到容器中 ADD jdk-8u171-linux-x64.tar.gz /usr/local/java/ #配置java环境变量 ENV JAVA_HOME /usr/local/java/jdk1.8.0_171 ENV JRE_HOME $JAVA_HOME/jre ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH ENV PATH $JAVA_HOME/bin:$PATH
(4)执行命令构建镜像
docker build -t='jdk1.8' .
注意后边的空格和点,不要省略
(5)查看镜像是否建立完成
docker images
7 Docker私有仓库
7.1 私有仓库搭建与配置
(1)拉取私有仓库镜像(此步省略)
docker pull registry
(2)启动私有仓库容器
docker run -di --name=registry -p 5000:5000 registry
(3)打开浏览器 输入地址http://192.168.184.141:5000/v2/_catalog看到{"repositories":[]}
表示私有仓库搭建成功并且内容为空
(4)修改daemon.json
vi /etc/docker/daemon.json
添加以下内容,保存退出。
{"insecure-registries":["192.168.184.141:5000"]}
此步用于让 docker信任私有仓库地址
(5)重启docker 服务
systemctl restart docker
7.2 镜像上传至私有仓库
(1)标记此镜像为私有仓库的镜像
docker tag jdk1.8 192.168.184.141:5000/jdk1.8
(2)再次启动私服容器
docker start registry
(3)上传标记的镜像
docker push 192.168.184.141:5000/jdk1.8
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!