Docker基础(centos安装、阿里云镜像加速器配置、常用命令、数据卷、DockerFile、镜像推送阿里云等)

Centos 8.1安装Docker

下载docker-ce.repo

curl https://download.docker.com/linux/centos/docker-ce.repo -o /etc/yum.repos.d/docker-ce.repo

安装依赖

yum install https://download.docker.com/linux/fedora/30/x86_64/stable/Packages/containerd.io-1.2.6-3.3.fc30.x86_64.rpm

安装docker-ce

yum install docker-ce -y

启动docker

systemctl start docker

阿里云镜像加速器配置

阿里云镜像加速器地址 https://cr.console.aliyun.com/cn-shanghai/instances/mirrors

  • vim /etc/docker/daemon.json
  • { “registry-mirrors”: [“https://xxxx.mirror.aliyuncs.com”] }
  • systemctl daemon-reload
  • systemctl restart docker

最后使用docker info命令查看镜像加速器是否生效

命令

帮助命令

docker --help

docker info

docker version

镜像命令

docker images 列出本地主机上的镜像

​ -a 列出本地所有的镜像(含中间映像层)

​ -q 只显示镜像ID

​ --digests 显示镜像的摘要信息

​ --no-trunc 显示完整的镜像信息

docker search 在hub上查找有哪些镜像

docker search -s 300 tomcat 收藏数超过300的tomcat镜像

​ --no-trunc 显示完整的镜像信息

docker pull tomcat == docker pull tomcat:latest 下载镜像

docker rmi hello-world 删除hello-world镜像

docker rmi -f hello-world 强制删除hello-world镜像

docker rmi -f nginx hello-world 删除多个

docker rmi -f $(docker images -q) 删除所有

docker history hzy/centos:2.0 列出镜像变更历史

docker如何导入导出镜像

导出

docker save 镜像id >/mydocker/tomcat.tar

导入

docker load < tomcat.tar

修改镜像名称和标签名称

docker tag 镜像id tomcat:8

容器命令

docker run -it imageid 启动交互式容器 (image id 使用docker images查看)

​ --name 为容器指定一个名称

​ -d 后台运行容器,并返回容器ID

​ -i 以交互式模式运行容器

​ -t 为容器重新分配一个伪输入终端

​ -P 随机端口映射

​ -p 指定端口映射

docker run -d centos /bin/sh -c “while true;do echo hello centos;sleep 5;done” 带脚本的后台运行容器

docker run -d -p:3306:8080 hzy/tomcat:1.0 不带脚本的后台运行容器

docker run -it -p:8080:8080 tomcat 指定外部端口和容器端口

docker run -it -P tomcat 随机端口映射

docker ps 查看运行的

​ -l 上次运行的容器

​ -a 列出当前所有正在运行的容器+历史上运行的

​ -n 显示最近n个创建的容器 如:-n 5

​ -q 静默模式,只显示容器编号

​ --no-trunc 不截断输出

exit 容器停止退出

ctrl+P+Q 容器不停止退出

docker start 容器id 启动容器 (容器id CONTAINER ID ,可以使用docker ps查看)

docker restart 容器id 重启容器

docker stop 容器id 停止容器

docker kill 容器id 强制停止容器

docker rm 容器id 删除已经停止的容器

​ -f 先停止在删除

docker rm -f $(docker ps -qa) 删除所有容器

docker logs 容器id 查看容器日志

​ -t 加入时间戳

​ -f 跟随最新日志打印

​ --tail 显示最后多少条

docker top 容器id 查看容器内运行的进程

docker inspect 容器id 查看容器内部细节

docker attach 容器id 直接进入容器启动命令的终端,不会启动新的进程

docker exec 容器id ls -l /root 在容器外宿主机操作容器

docker exec -it 容器id /bin/bash 进入容器

docker cp 容器id:容器文件地址 宿主机地址 复制容器内的文件到宿主机上

docker commit -a=“作者” -m=“提交的描述信息” 容器id 要创建的目标镜像名:标签名

docker commit -a=“hzy” -m=“tomcat9” 容器id hzy/tomcat 提交

数据卷

docker run -it -v 宿主机绝对路径目录:容器内目录 镜像名

docker run -it -v 宿主机绝对路径目录:容器内目录:ro 镜像名 ro只读,容器只能读文件

编写Dockerfile制作容器卷

第一步:

# volume test
FROM centos
VOLUME ["/dataVolumeContainer1","dataVolumeContainer2"]
CMD echo "finished,-----------success"
CMD /bin/bash

第二步:

执行build -f 参数才是用来指定 Dockerfile 的路径的

docker build 最后的 . 号 指定镜像构建过程中的上下文环境的目录

docker build -f Dockerfile目录 -t 镜像名称 .

docker build -f /mydocker/Dockerfile -t centos .

第三步:docker run 新的镜像名称

使用 docker inspect 指令来查看数据卷中容器的目录地址对应宿主机的地址

docker inspect 容器id			

数据卷容器

启动01

docker run -it --name 01 hzy/centos:1.0

启动02 并继承 01(使用继承 父子可以共享文件,各自添加都可以共享。及时父容器被删除,子容器与子容器之间依旧可以共享)

docker run -it --name 02 --volumes-from 01 hzy/centos:1.0

DockerFile

保留字指令

FROM 基础镜像,当前镜像是基于哪个镜像的

MAINTAINER 镜像维护者的姓名和邮箱地址

RUN 容器构建时需要运行的命令

EXPOSE 当前容器对外暴露的端口

WORKDIR 指定在创建容器后,终端默认登录的进来的工作目录,一个落脚点

ENV 用来在构建镜像过程中设置环境变量

ADD 将宿主机目录下的文件拷贝到镜像且自动处理URL和解压tar压缩包

COPY 类似ADD 拷贝文件和目录到镜像中

VOLUME 容器数据卷,用于数据保存持久化工作

CMD 指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD命令,但只有最后一个生效,CMD会被docker run之后参数替换

ENTRYPOINT 和CMD一样,不同点:,CMD不会被docker run之后参数替换,会追加

ONBUILD 当构建一个被继承的DockerFile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

制作centos的DockerFile并构建镜像

编写DockerFile文件并命令为DockerfileCentos

FROM centos
MAINTAINER hzy<hu_ziyang@foxmail.com>

ENV MYPATH /usr/local
WORKDIR $MYPATH

RUN yum -y install vim
RUN yum -y install net-tools

EXPOSE 80

CMD echo "------success------"
CMD /bin/bash

执行build构建新的镜像

docker build -f /mydocker/DockerfileCentos -t hzy/centos:2.0 .

制作tomcat的DockerFile并构建镜像

编写DockerFile文件并命令为Dockerfile

FROM centos
MAINTAINER hzy<hu_ziyang@foxmail.com>

COPY c.txt /usr/local/copy.txt
ADD jdk-8u231-linux-x64.tar.gz /usr/local/
ADD apache-tomcat-8.5.59.tar.gz /usr/local/

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH
ENV JAVA_HOME /usr/local/jdk1.8.0_231
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.59
ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.59
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin


EXPOSE 8080

CMD /usr/local/apache-tomcat-8.5.59/bin/startup.sh && tail -F /usr/local/apache-tomcat-8.5.59/bin/logs/catalina.out

执行build构建新的镜像

docker build -t hzy/tomcat8:1.0 .

执行run(添加两个容器卷 --privileged=true 权限问题)

docker run -d -p 8080:8080 --name tomcat8 -v /mydocker/tomcat/test:/usr/local/apache-tomcat-8.5.59/webapps/test
-v /mydocker/tomcat/tomcat8logs/:/usr/local/apache-tomcat-8.5.59/logs
--privileged=true
hzy/tomcat8:1.0

常用安装

mysql5.7安装

拉镜像

docker pull mysql:5.7

执行

 docker run -p 3306:3306 --name mysql -v /mydocker/mysql5.7/conf:/etc/mysql/conf.d  -v /mydocker/mysql5.7/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=19981101 -d d821b79a874a

启动成功,进入mysql容器

docker exec -it mysql容器id /bin/bash

进入mysql容器,登录mysql

mysql -uroot -p

在宿主机上备份mysql所有数据库

 docker exec mysql容器id  sh -c 'exec mysqldump --all-databases -uroot -p"123456"' >/mydocker/mysql5.7/all-databases.sql

redis3.2安装

拉镜像

docker pull redis:3.2

执行

docker run -p 6379:6379 -v /mydocker/redis3.2/data:/data -v /mydocker/redis3.2/conf/redis.conf:/usr/local/etc/redis/redis.conf -d redis:3.2 redis-server /usr/local/etc/redis/redis.conf --appendonly yes

编写redis配置文件

vim /mydocker/redis3.2/conf/redis.conf/redis.conf
# Redis配置文件样例
# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no

# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid

# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379

# 绑定的主机地址
# 你可以绑定单一接口,如果没有绑定,所有接口都会监听到来的连接
# bind 127.0.0.1

# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0

# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel verbose

# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile stdout
# 设置数据库的数量,默认数据库为0,可以使用select <dbid>命令在连接上指定数据库id
# dbid是从0到‘databases’-1的数目
databases 16

################################ SNAPSHOTTING  #################################
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合
# Save the DB on disk:
#
#   save <seconds> <changes>
#
#   Will save the DB if both the given number of seconds and the given
#   number of write operations against the DB occurred.
#
#   满足以下条件将会同步数据:
#   900秒(15分钟)内有1个更改
#   300秒(5分钟)内有10个更改
#   60秒内有10000个更改
#   Note: 可以把所有“save”行注释掉,这样就取消同步操作了

save 900 1
save 300 10
save 60 10000

# 指定存储至本地数据库时是否压缩数据,默认为yes,Redis采用LZF压缩,如果为了节省CPU时间,可以关闭该选项,但会导致数据库文件变的巨大
rdbcompression yes

# 指定本地数据库文件名,默认值为dump.rdb
dbfilename dump.rdb

# 工作目录.
# 指定本地数据库存放目录,文件名由上一个dbfilename配置项指定
# 
# Also the Append Only File will be created inside this directory.
# 
# 注意,这里只能指定一个目录,不能指定文件名
dir ./


slave-serve-stale-data yes
# 指定是否在每次更新操作后进行日志记录,Redis在默认情况下是异步的把数据写入磁盘,如果不开启,可能会在断电时导致一段时间内的数据丢失。
# 因为redis本身同步数据文件是按上面save条件来同步的,所以有的数据会在一段时间内只存在于内存中。默认为no
# IMPORTANT: Check the BGREWRITEAOF to check how to rewrite the append
# log file in background when it gets too big.

appendonly no

# 指定更新日志文件名,默认为appendonly.aof
# appendfilename appendonly.aof

# The fsync() call tells the Operating System to actually write data on disk
# instead to wait for more data in the output buffer. Some OS will really flush 
# data on disk, some other OS will just try to do it ASAP.

# 指定更新日志条件,共有3个可选值:
# no:表示等操作系统进行数据缓存同步到磁盘(快)
# always:表示每次更新操作后手动调用fsync()将数据写到磁盘(慢,安全)
# everysec:表示每秒同步一次(折衷,默认值)

appendfsync everysec
# appendfsync no
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb


slowlog-log-slower-than 10000
slowlog-max-len 1024


# 指定是否启用虚拟内存机制,默认值为no,
# VM机制将数据分页存放,由Redis将访问量较少的页即冷数据swap到磁盘上,访问多的页面由磁盘自动换出到内存中
# 把vm-enabled设置为yes,根据需要设置好接下来的三个VM参数,就可以启动VM了
vm-enabled no
# vm-enabled yes


# Redis交换文件最好的存储是SSD(固态硬盘)
# 虚拟内存文件路径,默认值为/tmp/redis.swap,不可多个Redis实例共享

vm-swap-file /tmp/redis.swap


# 将所有大于vm-max-memory的数据存入虚拟内存,无论vm-max-memory设置多少,所有索引数据都是内存存储的(Redis的索引数据就是keys)
# 也就是说当vm-max-memory设置为0的时候,其实是所有value都存在于磁盘。默认值为0
vm-max-memory 0

# Redis swap文件分成了很多的page,一个对象可以保存在多个page上面,但一个page上不能被多个对象共享,vm-page-size是要根据存储的数据大小来设定的。
# 建议如果存储很多小对象,page大小最后设置为32或64bytes;如果存储很大的对象,则可以使用更大的page,如果不确定,就使用默认值
vm-page-size 32

# 设置swap文件中的page数量由于页表(一种表示页面空闲或使用的bitmap)是存放在内存中的,在磁盘上每8个pages将消耗1byte的内存
# swap空间总容量为 vm-page-size * vm-pages
#
vm-pages 134217728
# 设置访问swap文件的I/O线程数,最后不要超过机器的核数,如果设置为0,那么所有对swap文件的操作都是串行的,可能会造成比较长时间的延迟,默认值为4
vm-max-threads 4

# 指定在超过一定的数量或者最大的元素超过某一临界值时,采用一种特殊的哈希算法
hash-max-zipmap-entries 512
hash-max-zipmap-value 64
list-max-ziplist-entries 512
list-max-ziplist-value 64
set-max-intset-entries 512
zset-max-ziplist-entries 128
zset-max-ziplist-value 64
# 指定是否激活重置哈希,默认为开启
activerehashing yes

# 指定包含其他的配置文件,可以在同一主机上多个Redis实例之间使用同一份配置文件,而同时各实例又拥有自己的特定配置文件
# include /path/to/local.conf
# include /path/to/other.conf

在宿主机上连接redis

docker exec -it redis容器id redis-cli

镜像推送阿里云

制作镜像

docker commit -a="hzy" -m="redis3.2" 容器id hzy/redis:3.2.1
  • 在阿里云容器镜像服务中创建镜像仓库

  • docker login --username=199****5067 registry.cn-hangzhou.aliyuncs.com
    
  • docker tag 镜像id  registry.cn-hangzhou.aliyuncs.com/huziyang/myredis:3.2.1
    docker push registry.cn-hangzhou.aliyuncs.com/huziyang/myredis:3.2.1
    
  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值