docker安装及常用功能简介
创始人
2024-05-30 05:41:15
0

一、Docker安装与启动

1、安装

(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

​ 如果是新的系统,可能会出现命令不可用的情况,这时候需要先安装yum-utils

yum -y install yum-utils 

(4)安装docker

sudo yum install docker-ce

(5)安装后查看docker版本

docker -v

2、设置ustc的镜像

创建并编辑文件

vi /etc/docker/daemon.json  

在该文件中输入如下内容:

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"],"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "10m","max-file": "3"},"data-root": "/var/lib/docker"
}

3、Docker的启动与停止

(1)启动docker:

systemctl start docker

(2)停止docker:

systemctl stop docker

(3)重启docker:

systemctl restart docker

(4)查看docker状态:

systemctl status docker

(5)开机启动:

systemctl enable docker

(6)查看docker概要信息

docker info

(7)查看docker帮助文档

docker --help

二、常用命令

1、镜像相关命令

(1)查看镜像

docker images

REPOSITORY:镜像名称

TAG:镜像标签

IMAGE ID:镜像ID

CREATED:镜像的创建日期(不是获取该镜像的日期)

SIZE:镜像大小

这些镜像都是存储在Docker宿主机的/var/lib/docker目录下

(2)搜索镜像
如果你需要从网络中查找需要的镜像,可以通过以下命令搜索

docker search 镜像名称

NAME:仓库名称

DESCRIPTION:镜像描述

STARS:用户评价,反应一个镜像的受欢迎程度

OFFICIAL:是否官方

AUTOMATED:自动构建,表示该镜像由Docker Hub自动构建流程创建的

(3)拉取镜像
拉取镜像就是从中央仓库中下载镜像到本地

docker pull 镜像名称/镜像IDdocker pull centos:7    #​ “:”后面是版本号,如果不写的话,直接下载最新的。

(4)删除镜像

docker rmi 镜像ID

2、容器相关命令

(1)查看容器
查看正在运行的容器

docker ps

查看所有容器

docker ps –a

查看停止的容器

docker ps -f status=exited

(2)创建与启动容器
创建容器常用的参数说明:

创建容器命令:docker run

-i:表示运行容器

-t:表示容器启动后会进入其命令行。加入这两个参数后,容器创建就能登录进去。即分配一个伪终端。

–name :为创建的容器命名。

-v:表示目录映射关系(前者是宿主机目录,后者是映射到宿主机上的目录),可以使用多个-v做多个目录或文件映射。注意:最好做目录映射,在宿主机上做修改,然后共享到容器上。

-d:在run后面加上-d参数,则会创建一个守护式容器在后台运行(这样创建容器后不会自动登录容器,如果只加-i -t两个参数,创建后就会自动进去容器)。

-p:表示端口映射,前者是宿主机端口,后者是容器内的映射端口。可以使用多个-p做多个端口映射

1)交互式方式创建容器:

docker run -it --name=容器名称 镜像名称:标签 bash

2)守护式方式创建容器:

docker run -di --name=容器名称 镜像名称:标签

进入守护式容器方式:

docker exec -it 容器名称 (或者容器ID) bash

退出当前容器

exit

(3)停止与启动容器
停止容器:

docker stop 容器名称(或者容器ID)

启动容器:

docker start 容器名称(或者容器ID)

(4)文件拷贝
如果我们需要将文件拷贝到容器内可以使用cp命令

docker cp 需要拷贝的文件或目录 容器名称:容器目录

也可以将文件从容器内拷贝出来

docker cp 容器名称:容器目录 需要拷贝的文件或目录

(5)目录挂载
我们可以在创建容器的时候,将宿主机的目录与容器内的目录进行映射,这样我们就可以通过修改宿主机某个目录的文件从而去影响容器。
创建容器 添加-v参数 后边为 宿主机目录:容器目录,例如:

docker run -di -v /usr/local/myhtml:/usr/local/myhtml --name=mycentos3 centos:7

挂载后,修改完宿主机文件,直接重新启动容器便可。

如果你共享的是多级的目录,可能会出现权限不足的提示。这是因为CentOS7中的安全模块selinux把权限禁掉了,我们需要添加参数 --privileged=true 来解决挂载的目录没有权限的问题

(6)查看运行容器的各种数据

docker inspect 容器名称(容器ID) 

(7)删除容器
注意如果是运行的容器直接进行删除或出现错误提示,只有先关闭后才可以移除。

docker rm 容器名称(容器ID)

(8)查看容器日志

docker logs -f 容器ID

三、镜像、容器迁移

1、镜像迁移

(1)在一台服务器上打包镜像,打包后文件的位置就在当前目录下

docker save pgrouting/pgrouting:12-3.0-3.0.1(镜像名称) > pgrouting.tar(打包的名称)

(2)在另一台服务器解压镜像

docker load -i pgrouting.tar

这时docker images就会看到打包之前的镜像了,适合离线模式下复制镜像

2、容器迁移

(1)将容器变成镜像

docker commit pgrouting pgimage

(2)打包镜像

docker save -o pgimage.tar pgimage

(3)在另一台服务器解压镜像

docker load -i pgimage.tar

(4)正常运行镜像生成容器便可

docker run --name pgrouting -e POSTGRES_PASSWORD=postgres -v /usr/local/pgrouting:/var/lib/postgresql -p 15432:5432 -d pgimage

四、通过Dockerfile封装镜像

1、将jdk打包为镜像

(1)拉取centos7镜像

docker pull centos:7

(2)下载linux版本jdk
我用的是jdk-8u261-linux-x64.tar.gz

(3)创建Dockerfile

#依赖镜像名称和ID
FROM centos:7
#指定镜像创建者信息
MAINTAINER ITCAST
#切换工作目录
WORKDIR /usr
RUN mkdir  /usr/local/java
#ADD 是相对路径jar,把java添加到容器中
ADD jdk-8u261-linux-x64.tar.gz /usr/local/java/#配置java环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_261
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)将Dockerfile和jdk放在同一个目录下,封装镜像

docker build -t jdk:8 .

注意后边的空格和点,不要省略。这个点表示当前文件夹下去寻找Dockerfile文件。如果不在当前文件夹下,可指定路径。

2、将jar包打包为镜像

(1)创建Dockerfile

FROM jdk1.8:latest
EXPOSE 8085
VOLUME /data
ADD GBS-TD-api.jar GBS-TD-api.jar
ENTRYPOINT ["java","-jar","GBS-TD-api.jar"]

(2)将Dockerfile和jar包放在同一个目录下,封装镜像

docker build -t gbs .

(3)运行镜像

docker run --name gbs-api -p 8085:8085 -d gbs

(4)进入容器

docker exec -it gbs-api bash

五、安装常用软件

1、安装postgresql+postgis+pgrouting

(1)拉取镜像

docker pull pgrouting/pgrouting:12-3.0-3.0.1

(2)运行镜像生成容器

docker run --name pgrouting -e POSTGRES_PASSWORD=postgres -v /usr/local/pgrouting:/var/lib/postgresql -p 15432:5432 -d pgrouting/pgrouting:12-3.0-3.0.1

(3)进入容器

docker exec -it pgrouting bash

(4)进入数据库

psql -U postgres

(5)安装插件

CREATE EXTENSION PostGIS
CREATE EXTENSION pgRouting

(6)退出数据库

\q

(7)退出容器

exit

2、安装nginx

(1)拉去镜像

docker pull nginx

(2)运行镜像生成容器

docker run -itd --name nginx -p 8080:80 nginx:latest

(3)进入容器

docker exec -it nginx bash

(4)创建挂载目录

mkdir -p /data/nginx/conf #存放配置文件
mkdir -p /data/nginx/logs
mkdir -p /data/nginx/conf.d

(5)复制配置文件

docker cp nginx:/etc/nginx/nginx.conf /data/nginx/conf/
docker cp nginx:/etc/nginx/conf.d/default.conf  /data/nginx/conf.d
docker cp nginx:/var/log/nginx  /data/nginx/logs
docker cp nginx:/usr/share/nginx/html  /data/nginx/        #前端页面放在宿主机的/data/nginx/html目录下,配置文件中的地址写的是容器中地址/usr/share/nginx/html。

(6)停止原有容器并删除

docker stop nginx
docker rm nginx

(7)修改配置文件nginx.conf
代理后端和正常一样
代理前端页面:前端页面放在宿主机的/data/nginx/html目录下,配置文件中的地址写的是容器中地址/usr/share/nginx/html。

user  nginx;
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;upstream nacoscluster {server 192.168.3.21:8848;server 192.168.3.22:8848;server 192.168.3.23:8848; }server {listen        80;server_name   192.168.3.22;location /nacos/ {proxy_pass http://nacoscluster/nacos/;}location ^~/tiles{ alias   /usr/share/nginx/html/tiles;     #容器内目录autoindex on;charset utf-8,utf-8;}}
}

(8)启动容器并完成文件挂载

docker run --name nginx --privileged -it -p 8081:80 -v /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /data/nginx/conf.d:/etc/nginx/conf.d -v /data/nginx/html:/usr/share/nginx/html  -v/data/nginx/logs:/var/log/nginx -d nginx

3、安装rabbitmq

(1)拉取

docker pull rabbitmq:3.9.20-management-alpine

(2)运行

docker run -d -p 5672:5672 -p 15672:15672 --name rabbitmq -v /data/rabbitmq/:/var/lib/rabbitmq -e RABBITMQ_DEFAULT_USER=root -e RABBITMQ_DEFAULT_PASS=root rabbitmq:3.9.20-management-alpine

4、安装reids

(1)拉取

docker pull redis:6.2.5

(2)创建挂载目录

mkdir -p /data/redis/{conf,data}

(3)在 /data/redis/conf下创建redis.conf

#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~redis 配置~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
# 指定Redis 只接收来自于该IP 地址的请求,如果不进行设置,那么将处理所有请求,在生产环境中为了安全最好设置该项。默认注释掉,不开启
#bind 127.0.0.1# #默认yes,开启保护模式,限制为本地访问
protected-mode no
# 监听端口,默认为6379
port 6379# 链接密码
requirepass 123456tcp-backlog 511# 设置客户端连接时的超时时间,单位为秒。当客户端在这段时间内没有发出任何指令,那么关闭该连接
timeout 0# 指定TCP连接是否为长连接,"侦探"信号有server端维护。默认为0.表示禁用
tcp-keepalive 300# 默认情况下,redis 不是在后台运行的,如果需要在后台运行,把该项的值更改为yes。
daemonize nosupervised no# 当Redis 在后台运行的时候,Redis 默认会把pid 文件放在/var/run/redis.pid,你可以配置到其他地址。当运行多个redis 服务时,需要指定不同的pid 文件和端口
pidfile /var/run/redis_6379.pid# log 等级分为4 级,debug,verbose, notice, 和warning。生产环境下一般开启notice
loglevel notice# 配置log 文件地址,默认使用标准输出,即打印在命令行终端的窗口上,修改为日志文件目录
logfile ""# 设置数据库的个数,可以使用SELECT 命令来切换数据库。默认使用的数据库是0号库。默认16个库
databases 16always-show-logo yes# 保存数据快照的频率,即将数据持久化到dump.rdb文件中的频度。用来描述"在多少秒期间至少多少个变更操作"触发snapshot数据保存动作
#默认设置,意思是:
# if(在60 秒之内有10000 个keys 发生变化时){
# 进行镜像备份
# }else if(在300 秒之内有10 个keys 发生了变化){
# 进行镜像备份
# }else if(在900 秒之内有1 个keys 发生了变化){
# 进行镜像备份
# }
save 900 1
save 300 10
save 60 10000# 当持久化出现错误时,是否依然继续进行工作,是否终止所有的客户端write请求。默认设置"yes"表示终止,一旦snapshot数据保存故障,那么此server为只读服务。如果为"no",那么此次snapshot将失败,但下一次snapshot不会受到影响,不过如果出现故障,数据只能恢复到"最近一个成功点"、
stop-writes-on-bgsave-error yes# 在进行数据镜像备份时,是否启用rdb文件压缩手段,默认为yes。压缩可能需要额外的cpu开支,不过这能够有效的减小rdb文件的大,有利于存储/备份/传输/数据恢复 读取和写入时候,会损失10%性能
rdbcompression yes# 是否进行校验和,是否对rdb文件使用CRC64校验和,默认为"yes",那么每个rdb文件内容的末尾都会追加CRC校验和,利于第三方校验工具检测文件完整性
rdbchecksum yes# 镜像备份文件的文件名,默认为 dump.rdb
dbfilename dump.rdbrdb-del-sync-files no# 数据库镜像备份的文件rdb/AOF文件放置的路径。这里的路径跟文件名要分开配置是因为Redis 在进行备份时,先会将当前数据库的状态写入到一个临时文件中,等备份完成时,再把该临时文件替换为上面所指定的文件,而这里的临时文件和上面所配置的备份文件都会放在这个指定的路径当中
dir ./replica-serve-stale-data yesreplica-read-only yesrepl-diskless-sync norepl-diskless-sync-delay 5repl-diskless-load disabledrepl-disable-tcp-nodelay noreplica-priority 100acllog-max-len 128lazyfree-lazy-eviction no
lazyfree-lazy-expire no
lazyfree-lazy-server-del no
replica-lazy-flush nolazyfree-lazy-user-del no# 默认情况下,redis 会在后台异步的把数据库镜像备份到磁盘,但是该备份是非常耗时的,而且备份也不能很频繁。所以redis 提供了另外一种更加高效的数据库备份及灾难恢复方式。开启append only 模式之后,redis 会把所接收到的每一次写操作请求都追加到appendonly.aof 文件中,当redis 重新启动时,会从该文件恢复出之前的状态。但是这样会造成appendonly.aof 文件过大,所以redis 还支持了BGREWRITEAOF 指令,对appendonly.aof 进行重新整理。如果不经常进行数据迁移操作,推荐生产环境下的做法为关闭镜像,开启appendonly.aof,同时可以选择在访问较少的时间每天对appendonly.aof 进行重写一次。
appendonly noappendfilename "appendonly.aof"# 设置对appendonly.aof 文件进行同步的频率。always 表示每次有写操作都进行同步,everysec 表示对写操作进行累积,每秒同步一次。no不主动fsync,由OS自己来完成。这个需要根据实际业务场景进行配置
appendfsync everysecno-appendfsync-on-rewrite noauto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mbaof-load-truncated yesaof-use-rdb-preamble yeslua-time-limit 5000slowlog-log-slower-than 10000slowlog-max-len 128latency-monitor-threshold 0notify-keyspace-events ""hash-max-ziplist-entries 512
hash-max-ziplist-value 64list-max-ziplist-size -2list-compress-depth 0set-max-intset-entries 512zset-max-ziplist-entries 128
zset-max-ziplist-value 64hll-sparse-max-bytes 3000stream-node-max-bytes 4096
stream-node-max-entries 100# 是否开启顶层数据结构的rehash功能,如果内存允许,请开启。rehash能够很大程度上提高K-V存取的效率
activerehashing yes# 客户端buffer控制。在客户端与server进行的交互中,每个连接都会与一个buffer关联,此buffer用来队列化等待被client接受的响应信息。如果client不能及时的消费响应信息,那么buffer将会被不断积压而给server带来内存压力.如果buffer中积压的数据达到阀值,将会导致连接被关闭,buffer被移除。#buffer控制类型包括:normal -> 普通连接;slave ->与slave之间的连接;pubsub ->pub/sub类型连接,此类型的连接,往往会产生此种问题;因为pub端会密集的发布消息,但是sub端可能消费不足.
#指令格式:client-output-buffer-limit    ",其中hard表示buffer最大值,一旦达到阀值将立即关闭连接;
#soft表示"容忍值",它和seconds配合,如果buffer值超过soft且持续时间达到了seconds,也将立即关闭连接,如果超过了soft但是在seconds之后,buffer数据小于了soft,连接将会被保留.
#其中hard和soft都设置为0,则表示禁用buffer控制.通常hard值大于soft.
client-output-buffer-limit normal 0 0 0
client-output-buffer-limit replica 256mb 64mb 60
client-output-buffer-limit pubsub 32mb 8mb 60# Redis server执行后台任务的频率,默认为10,此值越大表示redis对"间歇性task"的执行次数越频繁(次数/秒)。"间歇性task"包括"过期集合"检测、关闭"空闲超时"的连接等,此值必须大于0且小于500。此值过小就意味着更多的cpu周期消耗,后台task被轮询的次数更频繁。此值过大意味着"内存敏感"性较差。建议采用默认值。
hz 10dynamic-hz yesaof-rewrite-incremental-fsync yesrdb-save-incremental-fsync yesjemalloc-bg-thread yes

(4)运行

docker run -p 6379:6379 -v /data/redis/data:/data -v /data/redis/conf/redis.conf:/etc/redis/redis.conf --privileged=true --name myRedis -d redis:6.2.5 redis-server /etc/redis/redis.conf

六、搭建私有仓库

(1)拉取仓库镜像

docker pull registry

(2)启动私有仓库容器

docker run -di --name=registry -p 5000:5000 registry

(3)修改/etc/docker/daemon.json
在大括号里添加:“insecure-registries”:[“192.168.3.22:5000”]

{"registry-mirrors": ["https://docker.mirrors.ustc.edu.cn","http://hub-mirror.c.163.com"],"max-concurrent-downloads": 10,"log-driver": "json-file","log-level": "warn","log-opts": {"max-size": "10m","max-file": "3"},"data-root": "/var/lib/docker","insecure-registries": ["192.168.3.22:5000"]
}

(4)重启docker

systemctl restart docker

(5)重启仓库容器

docker start registry

(6)查看浏览器

http://192.168.3.22:5000/v2/_catalog

(7)标记此镜像为私有仓库的镜像

docker tag redis:6.2.5 192.168.3.22:5000/redis

(8)上传,此时查看浏览器会看到有镜像加入

docker push 192.168.3.22:5000/redis

(9)拉取

docker pull 192.168.3.22:5000/redis

相关内容

热门资讯

Python|位运算|数组|动... 目录 1、只出现一次的数字(位运算,数组) 示例 选项代...
张岱的人物生平 张岱的人物生平张岱(414年-484年),字景山,吴郡吴县(今江苏苏州)人。南朝齐大臣。祖父张敞,东...
西游西后传演员女人物 西游西后传演员女人物西游西后传演员女人物 孙悟空 六小龄童 唐僧 徐少华 ...
名人故事中贾岛作诗内容简介 名人故事中贾岛作诗内容简介有一次,贾岛骑驴闯了官道.他正琢磨着一句诗,名叫《题李凝幽居》全诗如下:闲...
和男朋友一起优秀的文案? 和男朋友一起优秀的文案?1.希望是惟一所有的人都共同享有的好处;一无所有的人,仍拥有希望。2.生活,...
戴玉手镯的好处 戴玉手镯好还是... 戴玉手镯的好处 戴玉手镯好还是碧玺好 女人戴玉?戴玉好还是碧玺好点佩戴手镯,以和田玉手镯为佳!相嫌滑...
依然什么意思? 依然什么意思?依然(汉语词语)依然,汉语词汇。拼音:yī    rán基本解释:副词,指照往常、依旧...
高尔基的散文诗 高尔基的散文诗《海燕》、《大学》、《母亲》、《童年》这些都是比较出名的一些代表作。
心在飞扬作者简介 心在飞扬作者简介心在飞扬作者简介如下。根据相关公开资料查询,心在飞扬是一位优秀的小说作者,他的小说作...
卡什坦卡的故事赏析? 卡什坦卡的故事赏析?讲了一只小狗的故事, 我也是近来才读到这篇小说. 作家对动物的拟人描写真是惟妙...
林绍涛为简艾拿绿豆糕是哪一集 林绍涛为简艾拿绿豆糕是哪一集第三十二集。 贾宽认为是阎帅间接导致刘映霞住了院,第二天上班,他按捺不...
小爱同学是女生吗小安同学什么意... 小爱同学是女生吗小安同学什么意思 小爱同学,小安同学说你是女生。小安是男的。
内分泌失调导致脸上长斑,怎么调... 内分泌失调导致脸上长斑,怎么调理内分泌失调导致脸上长斑,怎么调理先调理内分泌,去看中医吧,另外用好的...
《魔幻仙境》刺客,骑士人物属性... 《魔幻仙境》刺客,骑士人物属性加点魔幻仙境骑士2功1体质
很喜欢她,该怎么办? 很喜欢她,该怎么办?太冷静了!! 太理智了!爱情是需要冲劲的~不要考虑着考虑那~否则缘...
言情小说作家 言情小说作家我比较喜欢匪我思存的,很虐,很悲,还有梅子黄时雨,笙离,叶萱,还有安宁的《温暖的玄》 小...
两个以名人的名字命名的风景名胜... 两个以名人的名字命名的风景名胜?快太白楼,李白。尚志公园,赵尚志。
幼儿教育的代表人物及其著作 幼儿教育的代表人物及其著作卡尔威特的《卡尔威特的教育》,小卡尔威特,他儿子成了天才后写的《小卡尔威特...
海贼王中为什么说路飞打凯多靠霸... 海贼王中为什么说路飞打凯多靠霸气升级?凯多是靠霸气升级吗?因为之前刚到时确实打不过人家因为路飞的实力...
运气不好拜财神有用吗运气不好拜... 运气不好拜财神有用吗运气不好拜财神有没有用1、运气不好拜财神有用。2、拜财神上香前先点蜡烛,照亮人神...