2022-11-22 13:14:34 +08:00

10 KiB
Raw Blame History

title, date, author, top_img
title date author top_img
Docker 2021-03-23 10:30:31 文永达 https://gcore.jsdelivr.net/gh/volantis-x/cdn-wallpaper/abstract/67239FBB-E15D-4F4F-8EE8-0F1C9F3C4E7C.jpeg

Docker


Docker海豚身上背着一堆集装箱

场景:

传统的服务器 Docker 1G左右 几十兆几百兆 CentOS占CPU Docker CPU引擎占用低 1-2分钟 几秒 安装软件 安装方便 部署应用 部署应用,挂载,数据卷 多个应用放到一起 每个应用服务都是一个容器,相互隔离 一个独立的操作系统 必须依赖于操作系统推荐使用Linux

docker安装

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
# 另一种方式 
curl -sSL https://get.daocloud.io/docker | sh
# 如上述两种方式都不行
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 查看所有可安装版本
yum list docker-ce --showduplicates | sort -r
# 安装
yum install docker-ce-18.03.1.ce

1、镜像image。一个镜像代表一个软件。如redis镜像mysql镜像tomcat镜像。。 特点:只读 2、容器container。一个镜像只要一启动称之为启动了一个容器。 3、仓库repository。存储docker中的镜像具体位置 远程仓库:在全球范围内有一个远程仓库 本地仓库:当前自己机器中下载的镜像存储位置

Docker配置阿里云镜像加速 https://www.cnblogs.com/LUA123/p/11401962.html

查看docker 信息

docker info

查看docker 镜像 image

docker images

docker 安装镜像 image

MySQL 5.7

docker pull mysql:5.7

docker 移除镜像 image

若已有镜像用于容器,请先将容器删除

docker rm -f <CONTAINER ID>
docker image rm hello-world
docker rmi hello-world
#	第一个8080是外部海豚上的 第二个8080是内部集装箱上的 
docker run -p 8080:8080

-a stdin: 指定标准输入输出内容类型,可选 STDIN/STDOUT/STDERR 三项; -d: 后台运行容器,并返回容器 ID -i: 以交互模式运行容器,通常与 -t 同时使用; -P: 随机端口映射,容器内部端口随机映射到主机的端口 -p: 指定端口映射,格式为:主机 (宿主) 端口:容器端口 -t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用; --name="nginx-lb": 为容器指定一个名称; --dns 8.8.8.8: 指定容器使用的 DNS 服务器,默认和宿主一致; --dns-search example.com: 指定容器 DNS 搜索域名,默认和宿主一致; -h "mars": 指定容器的 hostname -e username="ritchie": 设置环境变量; --env-file=[]: 从指定文件读入环境变量; --cpuset="0-2" or --cpuset="0,1,2": 绑定容器到指定 CPU 运行; -m : 设置容器使用内存最大值; --net="bridge": 指定容器的网络连接类型,支持 bridge/host/none/container: 四种类型; --link=[]: 添加链接到另一个容器; --expose=[]: 开放一个端口或一组端口; --volume , -v 绑定一个卷

docker启动容器

docker start <container id>

docker停止容器

docker stop <container id>

docker重启容器

docker restart <container id>

docker启动MariaDB

拉去mariadb镜像

docker pull mariadb:10.2
docker images
docker run --name mariadb10.2 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mariadb:10.2

dockerRedis主从复制集群搭建

拉取redis4.0.11镜像

docker pull redis:4.0.11

编辑redis.conf

redis-master.conf

vim /root/mysoftware/docker-file/redis/redis-master.conf
bind 0.0.0.0 #让redis可以被任意ip访问
daemonize yes #让redis服务后台运行
# 如需设定密码
requirepass masterpassword # 设定密码

redis-slave1.conf

vim /root/mysoftware/docker-file/redis/redis-slave1
bind 0.0.0.0 #让redis可以被任意ip访问
daemonize yes #让redis服务后台运行
# 如需设定密码
requirepass masterpassword # 设定密码
# 设置主机地址端口 redis5.0以上为 replicaof <master-IP> <master-port>
slaveof <master-IP> <master-port>
# 查看master ip
docker inspect <container id>
# 主库有密码必需要配置,<master-password>代表主库的访问密码
masterauth <master-password>

运行redis容器

redis-master

# 运行服务
docker run -it --name redis-master -v /usr/docker/redis/redis-master.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35379:6379 redis:4.0.11 /bin/bash
# 进入容器
docker exec -it redis-master bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 如报错
mkdir -p /usr/redis/bin
# 测试连接
redis-cli -a <master-password> 

redis-slave1

# 运行服务
docker run -it --name redis-slave1 -v /usr/docker/redis/redis-slave1.conf:/usr/etc/redis/redis.conf -v /usr/docker/redis/data/:/data -d -p 35380:6379 redis:4.0.11 /bin/bash
# 进入容器
docker exec -it redis-slave1 bash
# 加载配置
redis-server /usr/local/etc/redis/redis.conf
# 如报错  Can't chdir to '/usr/redis/bin': No such file or directory
mkdir -p /usr/redis/bin
# 测试连接
redis-cli
# 查看主从信息
info Replication
# 密码认证
auth <slave-password>

dockerRedis哨兵高可用集群搭建

docker的镜像迁移到另一台服务器

# 找到想要移动的docker容器ID
dockerCONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                    NAMES
58ac9237b040        redis:4.0.11                 "docker-entrypoint.s…"   5 hours ago         Up 2 hours          0.0.0.0:6380->6379/tcp   redis-slave1
454bb484f90a        redis:4.0.11                 "docker-entrypoint.s…"   5 hours ago         Up 2 hours          0.0.0.0:6379->6379/tcp   redis-master
ps -a

# 提交变更并且把容器保存成镜像命名为redis-master
docker commit 454bb484f90a redis-master
# 把redis-master镜像保存成tar文件
docker save redis-master > /root/mysoftware/docker-file/redis/redis-master.tar
# 拷贝到新的机器执行load命令
docker load < ./redis-master.tar

修改运行中的docker容器的端口映射和挂载目录

方法一:删除原有容器,重建新容器

参考以上移除容器,启动容器

方法二修改配置文件重启docker服务

容器配置文件路径:

/var/lib/docker/containers/[[hash_of_the_container]/hostconfig.json]

其中的hashofthecontainer是docker镜像的hash值可以通过docker ps或者docker inspect containername查看。CONTAINER ID就可以看出来

可以到/var/lib/docker/containers目录下ls -l

{"Binds":["/usr/docker/redis/redis-slave2.conf:/usr/local/etc/redis/redis.conf"],"ContainerIDFile":"","LogConfig":{"Type":"json-file","Config":{}},"NetworkMode":"default","PortBindings":{"6379/tcp":[{"HostIp":"","HostPort":"6381"}]},"RestartPolicy":{"Name":"no","MaximumRetryCount":0},"AutoRemove":false,"VolumeDriver":"","VolumesFrom":null,"CapAdd":null,"CapDrop":null,"Dns":[],"DnsOptions":[],"DnsSearch":[],"ExtraHosts":null,"GroupAdd":null,"IpcMode":"shareable","Cgroup":"","Links":null,"OomScoreAdj":0,"PidMode":"","Privileged":false,"PublishAllPorts":false,"ReadonlyRootfs":false,"SecurityOpt":null,"UTSMode":"","UsernsMode":"","ShmSize":67108864,"Runtime":"runc","ConsoleSize":[0,0],"Isolation":"","CpuShares":0,"Memory":0,"NanoCpus":0,"CgroupParent":"","BlkioWeight":0,"BlkioWeightDevice":[],"BlkioDeviceReadBps":null,"BlkioDeviceWriteBps":null,"BlkioDeviceReadIOps":null,"BlkioDeviceWriteIOps":null,"CpuPeriod":0,"CpuQuota":0,"CpuRealtimePeriod":0,"CpuRealtimeRuntime":0,"CpusetCpus":"","CpusetMems":"","Devices":[],"DeviceCgroupRules":null,"DiskQuota":0,"KernelMemory":0,"MemoryReservation":0,"MemorySwap":0,"MemorySwappiness":null,"OomKillDisable":false,"PidsLimit":0,"Ulimits":null,"CpuCount":0,"CpuPercent":0,"IOMaximumIOps":0,"IOMaximumBandwidth":0}

重启docker服务再启动容器服务就可以了。

systemctl restart docker
docker ps -a
docker start <container id>

docker安装code-server

# 拉取镜像
docker pull codercom/code-server
# 创建宿主机目录
mkdir /usr/docker/codeserver
# 创建配置文件
vim /usr/docker/codeserver/config.yaml

bind-addr: 127.0.0.1:8080
auth: password
password: 123456
cert: false

# 创建并启动容器 # -u 表示以 root用户运行
docker run -d -u root -p 8088:8080 --name code-server -v /usr/docker/codeserver/config.yaml:/root/.config/code-server/config.yaml -v /usr/docker/codeserver:/home/code codercom/code-server

docker安装Jenkins

搜索Jenkins镜像

docker search jenkins

image-20221121125608385

拉取镜像

docker pull jenkins/jenkins

查看镜像

docker images

image-20221121131216876

启动镜像

cd /usr/local
mkdir jenkins_home
docker run -d -uroot -p 8889:8080 -p 50000:50000 --name jenkins -v /usr/bin/docker:/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock -v /etc/sysconfig/docker:/etc/sysconfig/docker -v /usr/local/jenkins_home:/var/jenkins_home -v /etc/localtime:/etc/localtime jenkins/jenkins

启动后查看日志

docker logs jenkins

image-20221121131635658可以找到初始密码

docker安装Nginx

docker pull nginx
docker run -d -p 80:80 -p 443:443 --name nginxweb --privileged=true
-v /usr/local/nginx/html/:/usr/share/nginx/html 
-v /usr/local/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
-v /usr/local/nginx/conf/conf.d:/etc/nginx/conf.d 
-v /usr/local/nginx/logs:/var/log/nginx nginx


ps aux | grep "nginx: worker process" | awk '{print $1}'

docker安装SQL Server

mkdir /etc/sqlserver_data
chmod -R 777 /etc/sqlserver_data
docker pull mcr.microsoft.com/mssql/server
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Wyd210213" -p 1433:1433 --memory 2000M --name sqlserver2022 -v /etc/sqlserver_data:/var/opt/mssql -d mcr.microsoft.com/mssql/server