docker-基础

docker下载

清除环境
[root@kimas ~]# yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine
配置docker  yum源
[root@kimas ~]# yum install -y yum-utils
[root@kimas ~]# yum-config-manager     --add-repo \ yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@kimas ~]# yum install docker-ce docker-ce-cli containerd.io -y
[root@kimas ~]# systemctl start docker

docker阿里云加速

[root@kimas ~]# sudo mkdir -p /etc/docker
[root@kimas ~]# sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors":["https://o2gubjcl.mirror.aliyuncs.com"]
}
EOF
[root@kimas ~]# sudo systemctl daemon-reload
[root@kimas ~]# sudo systemctl restart docker

docker基本命令

$ docker images   #查看主机上所有的镜像
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
centos              latest              0d120b6ccaa8        3 months ago        215MB
​
#解释
REPOSITORY     #镜像仓库的源
TAG            #版本号
IMAGE ID       #镜像ID
CREATED        #镜像的创建时间
SIZE           #镜像的大小
#可选项
-a --all    #列出所有镜像
-q --quiet  #只显示镜像的ID
​
$ docker info       #显示docker的系统信息,包括镜像和容器的数量
$ docker version    #显示docker的版本信息
​

docker搜索镜像

$ docker search 名称
#可选项
--filter=stars=3000   #搜索出来的镜像STARS大于3000

docker下载镜像

$ docker pull mysql      #下载镜像 docker pull 镜像名[:tag]
Using default tag: latest    #如果不写 tag 默认就是latest
latest: Pulling from library/mysql
852e50cd189d: Pull complete   #分层下载,docker image的核心 联合文件系统
29969ddb0ffb: Pull complete
a43f41a44c48: Pull complete
5cdd802543a3: Pull complete
b79b040de953: Pull complete
938c64119969: Pull complete
7689ec51a0d9: Pull complete
a880ba7c411f: Pull complete
984f656ec6ca: Pull complete
9f497bce458a: Pull complete
b9940f97694b: Pull complete
2f069358dc96: Pull complete
Digest: sha256:4bb2e81a40e9d0d59bd8e3dc2ba5e1f2197696f6de39a91e90798dd27299b093   #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest    #真实地址
​
#等价于
docker pull mysql
docker pull docker.io/library/mysql:latest
​
​
#docker指定版本下载
$ docker pull mysql:5.7
5.7: Pulling from library/mysql
852e50cd189d: Already exists
29969ddb0ffb: Already exists
a43f41a44c48: Already exists
5cdd802543a3: Already exists
b79b040de953: Already exists
938c64119969: Already exists
7689ec51a0d9: Already exists
36bd6224d58f: Pull complete
cab9d3fa4c8c: Pull complete
1b741e1c47de: Pull complete
aac9d11987ac: Pull complete
Digest: sha256:8e2004f9fe43df06c3030090f593021a5f283d028b5ed5765cc24236c2c4d88e
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.

docker删除镜像

[root@kimas ~]# docker rmi -f ae0658fdbad5    #删除指定容器的ID
[root@kimas ~]# docker rmi -f 容器ID 容器ID    #可删除多个容器ID,空格分开
[root@kimas ~]# docker rmi -f $(docker images -aq)   #删除全部的容器

docker容器基本命令

==说明:我们需要有镜像才可以使用容器==

[root@kimas ~]# docker run [可选项]    #启动服务 
#参数说明
--name="name"   #容器名字
-d              #后台运行
-it             #使用交互方式运行
-p(小写)         #指定容器端口
-P(大写)         #随机指定端口
​
[root@kimas ~]# docker run -it centos /bin/bash    #交互方式启动并进入容器
[root@25871e2889ad /]# ls     #查看容器内的centos,基础版本。很多命令都是不完善的!
bin  dev  etc  home  lib  lib64  lost+found  media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
[root@25871e2889ad /]# exit    #退出容器

docker列出运行的容器

$ docker ps      #查看当前运行的容器
-a     #查看当前运行的容器,但会同历史运行过的一同显示
-n=?   #显示最近创建的容器
-q     #只显示容器的编号

docker退出容器

$ exit     #直接停止,并退出容器
ctrl +p +q  #容器不停退出

docker删除容器

$ docker rm 容器ID         #删除指定容器,运行的容器不能删除
$ docker rm -f $(docker ps -aq)    #删除所有的容器 
$ docker ps -a -q | xargs docker rm      #删除所有的容器 

启动和停止容器

$ docker start 容器ID       #启动容器
$ docker restart 容器ID     #重启容器
$ docker stop 容器ID        #停止容器
$ docker kill 容器ID        #杀死容器

常用的其他命令

后台启动

$ docker run -d 镜像名
​
# 问题使用命令docker ps 发现 chentos 停止了。
​
# 常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止

docker查看日志

$ docker logs [可选项] 容器ID
#参数说明
-f        跟随日志输出
-t        显示时间戳
--tail    从日志末尾开始显示行数(默认为全部)

查看容器进程信息top

#docker top 容器ID
$ docker top 89451929a30c
UID     PID        PPID      C     STIME     TTY     TIME        CMD
root    6050       6034      0     02:50      ?      00:00:00    /bin/bash

查看镜像的元数据

[root@kimas ~]# docker inspect 89451929a30c
[
    {
        "Id": "89451929a30cf964b8d674c05c0f82eb308eaa84ae53e0cb727a8c6dd6d449bb",
        "Created": "2020-11-25T02:29:57.863346784Z",
        "Path": "/bin/bash",
        "Args": [],
        "State": {
            "Status": "running",
            "Running": true,
     
             ...
             ...
             ...

            "IPv6Gateway": "",
            "MacAddress": "02:42:ac:11:00:02",
            "Networks": {
  "0c304e10b0e11e289cdc2f5f5e56ed9973449541639138582738f5f055b8d1b0",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.2",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:02",
                    "DriverOpts": null
                }
            }
        }
    }
]

进入当前运行的容器

#我们通常容器都是使用后台方式运行的,需要进入容器修改配置命令
​
#命令
$ docker exec -it 容器ID /bin/bash
​
$ docker attach 容器ID
#正在执行当前的代码。。。
​
docker exec    # 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach  # 进入容器正在执行的终端,不会开启一个新的终端

从容器拷贝文件到本地服务器

# 命令详解
docker cp 容器ID:源文件 目标路径
$ docker cp a225cc21992f:/usr/share/elasticsearch/test.js /home/

练习

安装nginx

# 搜索nginx
$ docker search  nginx
# 下载nginx 指定版本号下载 nginx:tag
$ $ docker pull nginx
# 查看镜像是否下载完成
$ docker images
# 启动容器
docker run 后台 名字 *** -p指定端口 公网端口:容器端口 启动服务     #指定版本启动 nginx:tag
$ docker run -d --name mynginx -p 8080:80 nginx
# 服务器内部访问
$ curl localhost:8080
安装tomcat
# --rm 前台运行,退出表示删除用完及删除。。这方式不推荐使用
$ docker run -it --rm tomcat:9.0
​
# 下载镜像
$ docker pull tomcat:9.0
# 启动tomcat
docker run 后台 -p指定端口 暴露端口:容器内部端口 --name 镜像名称 启动的容器:tag
$ docker run -d -p 3355:8080 --name liutomcat tomcat:9.0
# 进入容器
$ docker exec -it 容器ID /bin/bash

安装es+kibana

# --net somenetwork  网络配置
[root@kimas ~]# docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx=512" elasticsearch:tag
​
[root@kimas ~]# curl localhost:9200
{
  "name" : "a225cc21992f",
  "cluster_name" : "docker-cluster",
  "cluster_uuid" : "8NfKMUQNRHC44hxFsGR3_w",
  "version" : {
    "number" : "7.9.3",
    "build_flavor" : "default",
    "build_type" : "docker",
    "build_hash" : "c4138e51121ef06a6404866cddc601906fe5c868",
    "build_date" : "2020-10-16T10:36:16.141335Z",
    "build_snapshot" : false,
    "lucene_version" : "8.6.2",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}
​
​
[root@kimas ~]# docker stats      #查看内存使用率

commit镜像

[root@kimas ~]# docker commit -a="作者名字" -m="描述信息" 容器ID 名称:tag

容器数据卷

使用数据卷

方式一:直接使用命令挂载 -v

[root@kimas ~]# docker run -it -v /home/test:/home centos /bin/bash
​
[root@kimas ~]#docker inspect 5ea95785007c
        "Mounts": [      #挂载-v卷
            {
                "Type": "bind",
                "Source": "/home/test",     #主机内地址
                "Destination": "/home",     #docker容器内地址
                "Mode": "",
                "RW": true,
                "Propagation": "rprivate"
            }
        ],  
​
#测试文件同步
1.在容器内部/home下创建一个文件
$ docker run -it centos /bin/bash
$ cd /home
$ touch test
2.在本地服务器/home/test查看存在文件
$ cd /home/test
$ cat test
​
#测试
1.停止容器
$ docker stop 容器ID
2.本地服务器/home/test修改文件内容
$ vim /home/test/test
3.启动容器
$ docker start 容器ID
4.检查文件是否同步

实战:安装MySQL

[root@kimas ~]#  docker pull mysql:5.7
​
[root@kimas ~]#  docker run -d -p 3306:3306  -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 --name  mysql01 mysql:5.7
#命令详解
-d       后台运行
-p       端口映射
-v       卷挂载
-e       环境配置
--name   名称

具名和匿名挂载

volume命令详解

$ docker volume []
Commands:
  create      #创建一个卷
  inspect     #检查在一个或多个卷上显示详细信息
  ls          #ls列表卷
  prune       #修剪删除所有未使用的本地卷
  rm          #rm删除一个或多个卷

#匿名挂载
-v 容器内路径!
$ docker run -d -P --name nginx01 -v /etc/nginx nginx  
#查看所有的volume
$ docker volume ls   #以下情况就是匿名挂载,-v只写了容器内的路径,没有写容器外的路径
DRIVER           VOLUME NAME
local            1acaf8fcd64270f95e201a33d25944c78b54be5310c91da80bbe540771664e2b
local            4c2d2f47a85ee468320945574e1c90cf66d61a92adb5d366f06cda132ecc45ed
​
#具名挂载
$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx nginx
#通过-v 卷名:容器内路径
$ docker volume ls  #以下这种就是具名挂载
DRIVER            VOLUME NAME
local             juming-nginx
​
$ docker volume inspect juming-nginx    #查看卷情况
[
    {
        "CreatedAt": "2020-12-04T14:39:11+08:00",
        "Driver": "local",
        "Labels": null,
        "Mountpoint": "/var/lib/docker/volumes/juming-nginx/_data",  #记录卷的位置
        "Name": "juming-nginx",
        "Options": null,
        "Scope": "local"
    }
]

所有的docker容器的卷,没有指定目录的情况下都在/var/lib/docker/volumes/xxx/_data

我们通过具名挂载可以方便的找到我们的一个卷,大多数情况下使用具名挂载

#如何确定是否具名或者匿名,还是指定路径挂载
-v 容器内路径          #匿名挂载
-v 卷名:容器内路径     #具名挂载
-v /宿主机:容器内路径   #指定路径挂载,已根开始

扩展:

#通过-v 容器内路径,ro rw 改变读写权限
ro readonly    #只读
rw readwrite   #可读可写
​
#一旦这个设置了容器权限,容器对我们挂载出来的内容就有限定了!
# ro权限只能通过宿主机来操作,容器内部是无法操作!默认是rw
$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:ro nginx
$ docker run -d -P --name nginx02 -v juming-nginx:/etc/nginx:rw nginx

初始dockerfile

dockerfile就是用来构建docker镜像的构建文件!命令脚本!

通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每一个都是一层。

$ vim /home/dockerfile/dockerfile01
#添加以下内容
FROM centos
​
VOLUME ["volume01","volume02"]
​
CMD echo "----end----"
CMD /bin/bash
$ docker build -f /home/dockerfile/dockerfile01 -t liangzai/centos:1.0  .
#命令详解
-f      指定文件
-t      指定名称标记tag版本

--volumes-from

容器与容器之间共享

docker run -it --name docker01 liangzai/centos:1.0
docker run -it --name docker02 --volumes-from docker01 liangzai/centos:1.0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值