Docker基础

docker学习记录

docker快捷命令

#删除所有容器
docker rm -f $(docker ps -aq)
#删除所有镜像
docker rmi -f $(docker images -aq)
#查看网络
ip addr

Centos8停更—转Conter stream

img

CentorOS 8.2下载失败

$ sudo sed -i -e "s|mirrorlist=|#mirrorlist=|g" /etc/yum.repos.d/CentOS-*
$ sudo sed -i -e "s|#baseurl=http://mirror.centos.org|baseurl=http://vault.centos.org|g" /etc/yum.repos.d/CentOS-*
$ yum update

查看当前内核版本

uname -r

使用 root 权限更新 yum 包

yum -y update
注意 
yum -y update:升级所有包同时也升级软件和系统内核; 
yum -y upgrade:只升级所有包,不升级软件和系统内核

docker安装

1.卸载旧版本

yum remove docker  docker-common docker-selinux docker-engine
  1. 卸载
    systemctl stop docker   #停止docker
    
    yum -y remove docker-ce docker-ce-cli containerd.io		#卸载
    
    sudo rm -rf /var/lib/docker        #删除目录
    sudo rm -rf /var/lib/containerd    #删除目录
    
  2. 安装需要的软件包, yum-util 提供yum-config-manager功能,另两个是devicemapper驱动依赖

yum install -y yum-utils device-mapper-persistent-data lvm2

2. 设置 yum 源

yum-config-manager --add-repo http://download.docker.com/linux/centos/docker-ce.repo(中央仓库)

yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo(阿里仓库)

3.选择docker版本并安装

​ 查看docker列表

yum list docker-ce --showduplicates | sort -r

# 默认最新版安装
yum install docker-ce docker-ce-cli containerd.io

安装版本

sudo yum install docker-ce 版本号

启动并加入开机启动

sudo systemctl start docker  #启动docker
sudo systemctl enable docker #加入开机启动项

2.1配置阿里云镜像加速

sudo mkdir -p /etc/docker

sudo tee /etc/docker/daemon.json <<-'EOF'
{  
	"registry-mirrors": ["https://affyvopl.mirror.aliyuncs.com"]
}
EOF

sudo systemctl daemon-reloadsudo 

sudo systemctl restart docker

2.2配置腾讯云镜像加速

#创建或修改 /etc/docker/daemon.json 文件,并写入以下内容:
sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": [
       "https://mirror.ccs.tencentyun.com"
  ]
}
EOF

#依次执行以下命令,重新启动 Docker 服务。
systemctl daemon-reload
service docker restart

#检查是否生效
docker info

#在返回信息最底下有如下信息则表示成功
#Registry Mirrors:
# https://mirror.ccs.tencentyun.com
#重启docker服务
systemctl restart docker.service

5.验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

Docker拉取镜像

Docker 安装 MySQL | 菜鸟教程 (runoob.com)

常用命令

liunk命令

#新建文件夹
mkdir 文件夹名
#新建文件
touch 文件名
#强制删除文件
rm -rf 文件夹名
#查看当前目录
pwd
#移动文件夹
mv 文件名/文件夹名 目的路径
#更新系统
apt update
#下载ip查看命令
apt install -y iproute2
#下载安装ping命令
apt-get install inetutils-ping

帮助命令

 docker version		 		#docker版本 
 docker info 				#docker信息
 docker [命令] --help		   #查看docker命令

镜像命令

docker image 镜像搜索下载地址

docker pull [镜像名:tag]			#拉取镜像,不加tag,默认最新版
docker image rm [image] #删除镜像 格式:镜像名:tag 也可以通过ID来删
docker rmi -f [image] #删除镜像 格式:镜像名:tag	也可以通过ID来删
docker rmi -f $(docker images -qa) #递归删除所有镜像
docker history 镜像ID  #镜像的历史
#容器添加tag
docker tag 容器ID 账号/newname:tag

容器命令

#从宿主机拷贝文件到容器

#查看容器具体信息
docker inspect 容器ID

#进入正在运行的容器
docker attach 容器ID

#强制删除容器
docker rm -f 容器ID

参数说明

#docker run 命令参数
-p 主机端口:容器内端口
-v 主机目录:容器内目录
-d 后台运行
-t 为容器重新分配一个伪输入终端,通常与 -i 同时使用;
-i 以交互模式运行容器,通常与 -t 同时使用;
--volumes-from 继承容器数据卷进行共享

Docke常用环境安装配置

redis

  1. 先去官网下载对应版本的配置文件
#新建映射文件
$ mkdir /data/redis
$ mkdir /data/redis/data

#创建容器并映射配置文件
docker run -p 6379:6379 --name redis \
-v /data/redis/data/redis.conf:/etc/redis/redis.conf  \
-v /data/redis/data:/data 
-d redis redis-server /etc/redis/redis.conf --appendonly yes

  1. 配置文件设置

    1. bind 127.0.0.1 注释掉,要不只能本机访问

    2. requirepass 连接外网的,建议设置密码

MySql

 #下载镜像
 docker pull mysql:8.0
 #创建目录
 #运行容器,做数据挂在
 docker run -itd --name mysql-test -p 3306:3306 -v /home/mybluet/mysql/conf:/etc/mysql/conf.d -v /home/mybluet/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=cc2356 mysql
 
 #注意
 如果创建一次挂载到宿主机成功,删除后重新创建容器并挂载,。密码等配置文件依然为第一次创建的内容

nginx

1.安装docker(复制里面的测试文件)
docker run --name nginx-test -p 80:80 -d nginx

docker start nginx-test
  1. 将nginx关键目录映射到本机
mkdir -p /root/nginx/www /root/nginx/logs /root/nginx/conf
#www: nginx存储网站网页的目录
#logs: nginx日志目录
#conf: nginx配置文件目录
docker ps -a  #查看容器id
#将nginx-test容器配置文件copy到本地
$ docker cp 容器id:/etc/nginx/nginx.conf /root/nginx/conf
#停止nginx-test服务
docker stop nginx-test
#创建容器,完成映射
docker run -d -p 80:80 --name nginx-web -v /root/nginx/www:/usr/share/nginx/html 
										-v /root/nginx/conf/nginx.conf:/etc/nginx/nginx.conf 
										-v /root/nginx/logs:/var/log/nginx nginx
#启动nginx
docker start nginx-web

nacos

1.挂载目录
mkdir -p /mydata/nacos/logs/                      #新建logs目录
mkdir -p /mydata/nacos/init.d/          
2.初始化数据库表
  1. 创建名为nacos的数据库
  2. 运行 nacos-mysql.sql文件建表[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fXoYILr0-1652508447382)(E:\Note\md\Docker.assets\watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM5NTk1NzY5,size_16,color_FFFFFF,t_70.png)]
  3. 修改配置文件application.properties
    vim /mydata/nacos/init.d/application.properties
    
    #配置内容如下
    # spring
    
    server.contextPath=/nacos
    server.servlet.contextPath=/nacos
    server.port=8848
    
    spring.datasource.platform=mysql
    db.num=1
    db.url.0=jdbc:mysql://localhost:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
    db.user=root
    db.password=root
    # nacos.cmdb.dumpTaskInterval=3600
    # nacos.cmdb.eventTaskInterval=10
    # nacos.cmdb.labelTaskInterval=300
    # nacos.cmdb.loadDataAtStart=false
    
    
    # metrics for prometheus
    #management.endpoints.web.exposure.include=*
    
    # metrics for elastic search
    management.metrics.export.elastic.enabled=false
    #management.metrics.export.elastic.host=http://localhost:9200
    
    # metrics for influx
    management.metrics.export.influx.enabled=false
    #management.metrics.export.influx.db=springboot
    #management.metrics.export.influx.uri=http://localhost:8086
    #management.metrics.export.influx.auto-create-db=true
    #management.metrics.export.influx.consistency=one
    #management.metrics.export.influx.compressed=true
    
    server.tomcat.accesslog.enabled=true
    server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D %{User-Agent}i
    # default current work dir
    server.tomcat.basedir=
    
    ## spring security config
    ### turn off security
    #spring.security.enabled=false
    #management.security=false
    #security.basic.enabled=false
    #nacos.security.ignore.urls=/**
    
    nacos.security.ignore.urls=/,/**/*.css,/**/*.js,/**/*.html,/**/*.map,/**/*.svg,/**/*.png,/**/*.ico,/console-fe/public/**,/v1/auth/login,/v1/console/health/**,/v1/cs/**,/v1/ns/**,/v1/cmdb/**,/actuator/**,/v1/console/server/**
    
    # nacos.naming.distro.taskDispatchPeriod=200
    # nacos.naming.distro.batchSyncKeyCount=1000
    # nacos.naming.distro.syncRetryDelay=5000
    # nacos.naming.data.warmup=true
    # nacos.naming.expireInstance=true
    
    nacos.istio.mcp.server.enabled=false
    
  4. 启动nacos容器
    docker  run \
    --name nacos -d \
    -p 8848:8848 \
    --privileged=true \
    --restart=always \
    -e JVM_XMS=256m \
    -e JVM_XMX=256m \
    -e MODE=standalone \
    -e PREFER_HOST_MODE=hostname \
    -v /mydata/nacos/logs:/home/nacos/logs \
    -v /mydata/nacos/init.d/application.properties:/home/nacos/init.d/custom.properties \
    nacos/nacos-server
    

minio

docker run \
   -p 9000:9000 \
   -p 9090:9090 \
   -d \
   --name minio \
   -v /mydata/minio/data:/data \
   -v /mydata/minio/config:/root/.minio \
   -e "MINIO_ROOT_USER=用户名" \
   -e "MINIO_ROOT_PASSWORD=密码" \
  minio/minio server /data --console-address ":9090"

jetty

docker run -d --name jetty  -p 8080:8080 -v /opt/webapps:/usr/local/jetty/webapps jetty
/var/lib/jetty/webapps
docker run -d --name jetty  -p 8080:8080 -v /opt/webapps:/var/lib/jetty/webapps jetty

Docker提交一个自己的镜像

commit镜像

docker commit -m="提交描述信息" -a="作者" 容器ID 目标镜像:[tag]

容器数据卷(容器数据持久化)

将容器中的数据挂在到宿主机中

#创建centos容器,并挂在home文件在test中,创建成功后进入容器
docker run -it -v /home/test:/home centos /bin/bash

容器文件挂分类

#具名挂载
$ docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx nginx
#匿名挂载
$ docker run -d -P --name nginx01 -v /etc/nginx nginx
#指定挂载目录
$ docker run -d -P --name nginx01 -v /home/nginx:/etc/nginx nginx
#查看匿名和具名挂载目录
$ docker volume ls
local     808ca988229ef9cffba838de3c634d3e93cd42a5ad00876f296a57d0914246ef
local     cbd513b99b825527c8c8a8e544f6cdeeb9384cfd513133f6f8546e6d05bf6c25
local     d96070683262650cd5d0439355450803f6b2e0aae7e6faa7ddbf0a62ea500fdb
local     e9cbac0b341c5527c5a96527e75e206f222ee04ee2bef2cad0eafc5ff1172178
local     e83c65e92b45b4f961ac656480479c0fcf356f786d055115a85f1236a43fe76d
local     ec05750ae89c9a7bf65007e4d44ac328c1fc79fb0a807295e270a10435ef53c7
local     juming-nginx
local     portainer_data
#具名和匿名挂载目录查看
$ volume inspect juming-nginx
[
    {
        "CreatedAt": "2022-05-12T15:59:33+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]
#挂载目录全在/var/lib/docker/volumes docker的工作目录中

拓展

#容器挂载读写权限 ro,rw(默认为rw),当权限为ro时,容器中挂载的文件只能通过宿主机来修改,容器内部是无法操作的
$ docker run -d -P --name nginx01 -v juming-nginx:/etc/nginx:ro nginx

数据卷容器同步

注:共享数据卷通过互相复制同步,如果第一个容器数据卷挂载持久化到宿主机,那么宿主机中的数据不会丢失;如果是Dockerfile直接挂载则是互相复制模式

#生成第一个mysql容器,挂载容器到宿主机
docker run -d -p 3310:3306 -v /etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name mysql01 mysql:5.7
#生成第二个mysql容器,使用--volumes-from进行集成msyql01容器的挂在卷,实现数据共享
docker run -d -p 3311:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7 --volumes-from mysql01 mysql:5.7

Dockerfile

指令说明

集合

FROM基础镜像,一切从这里构建
MAINIAINER镜像构建作者,一般姓名加邮箱
RUN镜像构建的时候需要运行的命令
ADD步骤:tomcat镜像,这个运行文件的压缩包!添加内容
WORKID镜像的工作目录
VOLUME挂载的目录
EXPOSE保留的端口配置
CMD指定这个容器启动的时候需要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT指定这个容器启动的时候要运行的命令,可以追加命令
ONBUILD当构建一个被继承DockerFile 这个时候就会运行ONBUILD 的指令,触发指令
COPY类似ADD 将我们文件拷贝到镜像中
ENV构建的时候设置镜像变量

CMD和ENTRYPOINT的区别

#运行容器时后面加参数会直接替换CMD中的命令
#ENTRYPOINT会在命令后追加
#例:
CMD ["ls","-a"]
ENTRYPOINT ["ls","-a"]

docker run 镜像ID -l #-l cmd会直接替换,ENTRYPOINT则追加

CMD ["-l"]
ENTRYPOINT ["ls","-a","-l"]

牛刀小试

编写dockerfile文件

FROM centos
MAINTAINER bluet<1658439491@qq.com>

ENV MYPATH /usr/local	#全局变量
WORKDIR $MYPATH   #设置工作目录

RUN yum -y install vim    #下载vim
RUN yun -y install net-tools #下载工具

EXPOSE 80			#暴露端口80

CMD echo $MYPATH
CMD echo -----end------
CMD /bin/bash

通过dockerfile构建镜像

docker build -f [dockerfile文件路径] -t 镜像名:[tag]

制作tomcat镜像

#创建说明文件和Dockerfile
touch readme.txt
vim Dockerfile
#执行Dockerfile文件生成镜像diytomcat
docker build -t diytomcat .
#创建容器,挂载项目和日志
docker run -d -p 9090:8080 --name bluettomcat -v /home/tomcat/test:/usr/local/apache-tomcat-9.0.62/webapps/test -v /home/tomcat/tomcatlogs:/usr/local/apache-tomcat-9.0.62/logs diytomcat

#--------------------------------------------------------beg-----------------------------------------------------------------
#dockerfile文件
FROM centos:7
MAINTAINER bluet<CYS1658439491@outlook.com>

COPY readme.txt /usr/local/readme.txt
ADD jdk-8u333-linux-x64.tar.gz /usr/local
ADD apache-tomcat-9.0.62.tar.gz /usr/local

RUN yum -y install vim

ENV MYPATH /usr/local
WORKDIR $MYPATH

ENV JAVA_HOME /usr/local/jdk1.8.0_333
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
ENV CATALINA_HOME /usr/local/apache-tomcat-9.0.62
ENV CATALINA_BASH /usr/local/apache-tomcat-9.0.62
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin

EXPOSE 8080

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

注:JAVA_HOME解压后JDK文件名,有的为java,有的为jdk,注意查看

发布镜像

发布到docker hub默认仓库

#修改镜像tag
docker tag eb6bd5eb2ae9 cysindocher/diytomcat:1.0
#发布镜像
docker push cysindocher/diytomcat:1.0

发布到阿里云镜像仓库

#退出登录
docker logout
#登录登录阿里云Docker Registry
docker login --username=手机号 registry.cn-hangzhou.aliyuncs.com
#生成镜像版本号
docker tag [ImageId] registry.cn-hangzhou.aliyuncs.com/bluet/yunsong_test:[镜像版本号]
#提交镜像到仓库
docker push registry.cn-hangzhou.aliyuncs.com/bluet/yunsong_test:[镜像版本号]

#选择合适的镜像仓库地址
#从ECS推送镜像时,可以选择使用镜像仓库内网地址。推送速度将得到提升并且将不会损耗您的公网流量。
#如果您使用的机器位于VPC网络,请使用 registry-vpc.cn-hangzhou.aliyuncs.com 作为Registry的域名登录。

镜像本地拷贝

#打包镜像
docker save --help
#读取镜像
docker load --help

Docker网络

查看网络地址

#查看网络地址
ip addr
#lo:本机回环地址、eth0:内网地址、docker0:docker地址
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 52:54:00:52:67:33 brd ff:ff:ff:ff:ff:ff
    inet 10.0.4.2/22 brd 10.0.7.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::5054:ff:fe52:6733/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 02:42:43:78:42:49 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:43ff:fe78:4249/64 scope link 
       valid_lft forever preferred_lft forever

容器连通

#通过Docker0网络联通,由docker0统一管理IP地址,docker0相当于路由器,将容器连通

#--link连通,可以直接通过容器name连通,(新版本已弃用)
docker run -d -P --name tomcat03 --link tomcat02 tomcat
#原理查看,容器中host目录,添加了对应的目录
docker exec -it tomcat03 cat /etc/hosts
127.18.0.3 tomcat2 s48fesef85e

自定义网络

#查看docker网络
docker network ls

#移除网络
docker network rm 网络ID

#创建一个自定义网络
#--driver bridge  网络模式-桥接
# --subnet 192.168.0.0/16  网络长度 /16:192.168.0.1-192.168.255.255
#--geteway 指定网关IP
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

#创建容器并指定网络
docker run -d -P --name tomcat01 --net mynet tomcat

#不同网络之间容器连通容器
#mynet:网络名   tomcat01:其他网络的容器名
docker network connect mynet tomcat01

Docker Compose

docker-compose命令解析

docker-compose      # 拉取镜像
docker-compose up -d nginx     # 运行nginx容器
docker-compose up -d     # 运行所有容器
docker-compose ps     # 查看容器运行状态
docker-compose down     # 停止容器和容器网络
docker-compose rm nginx     # 删除nginx容器

安装

  1. 下载链接 直接下载下来liunk二进制文件,放入 /usr/local/bin,

  2. 执行命令 -添加可执行权限

    $ sudo chmod +x /usr/local/bin/docker-compos
    #测试
    
    $ docker-compose --version
    

部署步骤

  1. 打包微服务
  2. dockerfile镜像构建
  3. docker-compose.yaml编排项目
  4. 上传服务器运行 docker-compose up

dockerFile编写规则

#下载镜像
docker pull portainer/portainer
#单机部署
docker run -d -p 9001:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --name prtainer portainer/portainer

dockerFile执行

//构建镜像命令
docker build -t gatway-bluet:1.0 . 
 
//新建并启动容器
docker run -d -p 8070:8070 --name gatway gatway-bluet:1.0
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值