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
posted @   那山那狗  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示