docker-基础
卸载旧版本docker
sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
安装
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r 列出可供选择的版本
sudo yum install docker-ce docker-ce-cli containerd.io (默认下载最新的稳定版)
sudo yum install docker-ce-<VERSION_STRING> docker-ce-cli-<VERSION_STRING> containerd.io 选择版本下载安装
卸载docker
sudo yum remove docker-ce docker-ce-cli containerd.io
sudo rm -rf /var/lib/docker
sudo rm -rf /var/lib/containerd
镜像加速
编辑新建 vim /etc/docker/daemon.json 加入下面一行代码 镜像加速
mkdir /etc/docker/
{
"registry-mirrors": ["https://6h6ezoe5.mirror.aliyuncs.com"]
}
docker镜像常用命令
docker是怎摸工作的?
docker 是一个C/S结构的系统,docker的守护进程运行在主机上,通过Socket从客户端访问,dockerserver接收到 docker-client的指令,就会执行这个命令
docker镜像命令
docker info #显示docker的系统信息,包括镜像和容器的数量
docker search #搜索镜像
docker search mysql -f=STARS=5000 #可以根据条件搜索 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 11700 [OK]
docker pull mysql 拉去镜像
默认拉取最新版
[root@localhost ~]# docker pull mysql Using default tag: latest latest: Pulling from library/mysql a10c77af2613: Pull complete b76a7eb51ffd: Pull complete 258223f927e4: Pull complete 2d2c75386df9: Pull complete 63e92e4046c9: Pull complete f5845c731544: Pull complete bd0401123a9b: Pull complete 3ef07ec35f1a: Pull complete c93a31315089: Pull complete 3349ed800d44: Pull complete 6d01857ca4c1: Pull complete 4cc13890eda8: Pull complete Digest: sha256:aeecae58035f3868bf4f00e5fc623630d8b438db9d05f4d8c6538deb14d4c31b Status: Downloaded newer image for mysql:latest #最新版 docker.io/library/mysql:latest #docker pull mysql 相当于 docker pull docker.io/library/mysql:latest [root@localhost ~]#
拉取指定版本
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
a10c77af2613: Already exists
b76a7eb51ffd: Already exists
258223f927e4: Already exists
2d2c75386df9: Already exists
63e92e4046c9: Already exists
f5845c731544: Already exists
bd0401123a9b: Already exists
2724b2da64fd: Pull complete
d10a7e9e325c: Pull complete
1c5fd9c3683d: Pull complete
2e35f83a12e9: Pull complete
Digest: sha256:7a3a7b7a29e6fbff433c339fc52245435fa2c308586481f2f92ab1df239d6a29
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
[root@localhost ~]#
docker image 查看已有镜像
[root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql 5.7 8b43c6af2ad0 26 hours ago 448MB mysql latest b05128b000dd 26 hours ago 516MB busybox latest 7138284460ff 6 days ago 1.24MB hello-world latest feb5d9fea6a5 7 weeks ago 13.3kB
docker image rm 镜像ID或者镜像名字
docker rmi 镜像ID或者镜像名字 (同上一个用途)
[root@localhost ~]# docker image rm 8b43c6af2ad0Untagged | mysql:5.7
Untagged: mysql@sha256:7a3a7b7a29e6fbff433c339fc52245435fa2c308586481f2f92ab1df239d6a29
Deleted: sha256:8b43c6af2ad08d95cdcb415d245446909a6cbc1875604c48c4325972e5b00442
Deleted: sha256:aad43f4d2f66438acd2d156216cd544a728851238714975c38d9a690f68afc57
Deleted: sha256:7b9addbc002c1e828aee7ec5c2679b04a591b6fa2b96002701ddee9d4ed54395
Deleted: sha256:b00f8e4e6ce8920fb563615503f232799ab380b338c3f2cbb5e86a2d762a6e80
Deleted: sha256:8fbabb17fd7b46a59cc15301741bf73a527b862f59cc6e84fae15b4dd5c425c0
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
mysql latest b05128b000dd 26 hours ago 516MB
busybox latest 7138284460ff 6 days ago 1.24MB
hello-world latest feb5d9fea6a5 7 weeks ago 13.3kB
一次性删除所有镜像
[root@localhost ~]# docker rmi -f $(docker images -q)
Untagged: busybox:latest
Untagged: busybox@sha256:e7157b6d7ebbe2cce5eaa8cfe8aa4fa82d173999b9f90a9ec42e57323546c353
Deleted: sha256:7138284460ffa3bb6ee087344f5b051468b3f8697e2d1427bac1a20c8d168b14
Untagged: hello-world:latest
Untagged: hello-world@sha256:cc15c5b292d8525effc0f89cb299f1804f3a725c8d05e158653a563f15e4f685
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
docker 容器命令
docker容器常用命令
退出容器
exit #直接容器停止并退出
ctrl +p +q #容器不停止退出
删除容器
docker rm 容器id #删除容器;正在运行的需要加上 -f 选项
docker rm -f $(docker ps -aq) #删除全部容器
docker ps -aq | xargs docker rm -f #删除全部容器
启动和停止容器的操作
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止当前运行的容器
docker kill 容器id #强制停止当前容器
查看日志
docker logs -f -t --tail 10 容器id
--tail 指定查看的条数;-f 监控的查看不退出;-t 显示时间
查看容器中的进程信息
docker top 容器id
查看镜像的元数据
docker inspect 容器id;或者名字
docker inspect 镜像 #也可以查看 镜像的元数据
进入当前正在运行的容器
我们通常容器都是使用后台方式运行,需要进入容器,修改一些配置
docker exec -it 容器id /bin/bash # 进入容器会开启一个新的终端,可以在里面操作(常用)
docker attach #进入容器正在执行的终端,不会启动新的进程
从容器内拷贝文件到宿主机
docker cp aa8426a1b1ec:/home/luoluo #例子
docker cp 容器id:/path/file /path/to/宿主机目录
提交修改的镜像
docker commit -a "作者" -m "一些信息" 镜像id 版本
例子
[root@localhost ~]# docker commit -a "luluo" -m "chuanjian" 82a00a96ca79 nginx:443 sha256:f0f49fc22bd775f0589c9be1d138c5be28de7a5641fbe3c2377f6e582a0d2cbe [root@localhost ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx 443 f0f49fc22bd7 14 seconds ago 141MB nginx latest ea335eea17ab 40 hours ago 141MB centos 7 eeb6ee3f44bd 2 months ago 204MB
双向绑定存储卷
docker run -d --name mysql01 -v /data:/home -e MYSQL_ROOT_PASSWORD=123123 mysql
-v 宿主机路径:docker容器内路径 可以使用多个 -v #指定路径挂载
-v /容器内路径/ #匿名挂载
-v 具名:docker容器内路径 #具名挂载 ,常用
docker volume ls #查看
[root@localhost ~]# docker run -d --name nginx02 -v juming:/home/ -P nginx 920c2a7033ea3294e64ecfd8509e96c57de69088550023c1c17b689b17260bad [root@localhost ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 920c2a7033ea nginx "/docker-entrypoint.…" 3 seconds ago Up 1 second 0.0.0.0:49154->80/tcp, :::49154->80/tcp nginx02 3a752d04da18 nginx "/docker-entrypoint.…" 13 minutes ago Up 13 minutes 0.0.0.0:49153->80/tcp, :::49153->80/tcp nginx01 [root@localhost ~]# docker volume ls DRIVER VOLUME NAME local 1ff0e4720c6dac401a4a00dbb02d5c8dd4b74817b86c463c88e3e08eff77425b local 925e6fecc5a90f142c79de3bfa49cd340859e43eaccf4e79518f60d3fc437f86 local 543261dcf60211ee9ab948f79e9ccee1bcf59f60e30fdef4b7e9ee23bd4b80b9 local a93aa2f5c9a97fce3bb87e88a2d9884c94fe82500f961892a96d3c8569336d27 local be88bbc362ffd40bf4c669cdd5164c67b541878d9be94b352a8fc0cea3fa3fe4 local c6704979ced498a6f328ea855a659efb1bf3e5234ea7993edd29868409270414 local cbf39fa289185d8974b5d7e8f050a544fec2f73e68d043fbdb4f4119336bbc77 local ceshi local d4cf28548f3b18a5990abbf1efbcd7421a637b86e12d886342f068245faeb560 local f94756e886328ce9c05b7b84f7ea8820a406b3866cf4f6f1e1625dc94cecd453 local juming local luo [root@localhost ~]#
docker inspect 卷名 #查看路径,一般都是在 /var/lib/docker/volumes/ 下
扩展:
#通过 -v 容器内路径, ro rw 改变读写权限
ro readonly #只读 # 只要看到 ro 就说明这个路径只能通过宿主机来操作,容器内部无法操作!
rw readwrite #可读可写 #不写默认就是rw
例子:
[root@localhost ~]# docker run -d --name nginx02 -v juming:/home:ro -P nginx
[root@localhost ~]# docker exec -it nginx02 /bin/sh
-e 额外的设置 ,建议去看hub.docker 服务的官方文档启动服务
多个mysql实现数据共享
--volumes-from 容器id或者容器名字 #实现多个容器共享数据卷
docker run -d --name mysql01 -P -v /data/etc:/etc/mysql/conf.d -v /var/lib/mysql -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6 #第一个数据卷容器
docker run -d --name mysql02 -P --volumes-from mysql01 -e MYSQL_ROOT_PASSWORD=123123 mysql:5.6
小练习
docker 安装 nginx
#1.搜索镜像 docker search nginx ,建议取docker.hub 搜索
#2.下载镜像 pull
#3.运行测试
docker run -d --name nginx01 -p 87:80 nginx
-p 宿主机端口:容器内部监听端口
-P 随机指定宿主机映射端口
Dockerfile
Dockerfile 就是用来构建 docker 镜像的构建文件!命令脚本 !
通过这个脚本可以生成镜像,镜像是一层一层的,脚本一个个的命令,每个命令都是一层!所以要尽可能的减少构建行数!
#创建一个 dockerfile 文件,名字可以随机,建议 Dockerfile
通过dockerfile 构建镜像 docker build -t 名字:版本号 . #如果dockerfile名字不是标准的Dockerfile 需要加 -f 指定文件 docker build -f dockerfile文件路径
docker history 镜像id 或者 名字 #可以查看镜像构建步骤
[root@localhost ~]# docker history mycentos:0.1
IMAGE CREATED CREATED BY SIZE COMMENT
9672b60d6fa1 13 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "/bin… 0B
c607b246025e 13 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
3dd73a42e039 13 minutes ago /bin/sh -c #(nop) CMD ["/bin/sh" "-c" "echo… 0B
740671d818a1 13 minutes ago /bin/sh -c #(nop) EXPOSE 80 0B
e96554238b0c 13 minutes ago /bin/sh -c yum -y install net-tools 144MB
89d6e620ba25 13 minutes ago /bin/sh -c yum -y install vim 199MB
da0112708a92 14 minutes ago /bin/sh -c #(nop) WORKDIR /usr/local 0B
82608b0bc116 14 minutes ago /bin/sh -c #(nop) ENV MYPATH=/usr/local 0B
e9d670ab3352 14 minutes ago /bin/sh -c #(nop) MAINTAINER luluo<62737490… 0B
eeb6ee3f44bd 2 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0B
<missing> 2 months ago /bin/sh -c #(nop) LABEL org.label-schema.sc… 0B
<missing> 2 months ago /bin/sh -c #(nop) ADD file:b3ebbe8bd304723d4… 204MB
登录docker.hub
docker login -uluoxinwei -pangel4239360
docker push 名字:版本号 #推送到远程仓库
打包镜像
docker save 镜像 -o 路径+打包名
导入镜像
docker
load -i mmm.tar
DockerFile的指令
FROM #基础镜像;一切从这里开始构建
MAINTAINER #镜像是谁写的;姓名+邮箱
RUN #镜像构建的时候需要运行的命令
ADD #类似COPY,会自动解压
WORKDIR #镜像的工作目录
VOLUME #挂载的目录
EXPOSE #保留端口配置
CMD #指定这个容器启动时要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT #指定这个容器启动时候要运行的命令,可以追加命令
ONBUILD #ONBUILD
它后面跟的是其它指令,比如 RUN
, ADD
等,这些指令在当前镜像构建时并不会被执行,只有以当前镜像为基础镜像,去构建下一级镜像的时候才会被执行。
COPY #类似ADD,将我们文件拷贝到镜像中
ENV #构建的时候设置环境变量
Docker网络
docker0 网桥
ip addr 查看对应关系
--link 通过/etc/hosts 的方式 映射 docker 容器名 与 IP 做到可以 直接Ping通容器名 单向的,两边都要设置 ,不建议使用了
自定义网络
查看所有的docker网络
docker network ls
网络模式:
bridge : 桥接 docker (默认,自己创建也使用bridge 模式)
none : 不配置网络
host : 和宿主机共享网络
container : 容器网络连接!(用的少!局限很大)
测试:
#我们直接启动的命令不指定网络会有这样一个默认参数 --net bridge,而这个就是我们的 docker0
docker run -d -P --name tomcat01 --net bridge tomcat
自定义一个网络
--driver bridge
--subnet 192.168.0.0/16
--gateway 192.168.0.1
docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet # --driver bridge 可以省略,默认就是bridge
docker network connect 网络名字 容器id或者名字
例子:docker network connect mynet tomcat01
#把不同网段的容器连接打通,就是把 tomcat01 放到了 mynet 网络下 , 一个容器两个 ip 地址
docker stats监控容器资源消耗
docker stats #默认情况下,stats 命令会每隔 1 秒钟刷新一次输出的内容直到你按下 ctrl + c。下面是输出的主要内容:
[CONTAINER]:以短格式显示容器的 ID。 [CPU %]:CPU 的使用情况。 [MEM USAGE / LIMIT]:当前使用的内存和最大可以使用的内存。 [MEM %]:以百分比的形式显示内存使用情况。 [NET I/O]:网络 I/O 数据。 [BLOCK I/O]:磁盘 I/O 数据。 [PIDS]:PID 号。
只返回当前的状态
如果不想持续的监控容器使用资源的情况,可以通过 --no-stream 选项只输出当前的状态:
$ docker stats --no-stream
这样输出的结果就不会变化了,看起来省劲不少。
只输出指定的容器
[root@localhost ~]# docker stats --no-stream nginx01 CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 82a00a96ca79 nginx01 0.00% 3.918MiB / 972.3MiB 0.40% 1.29kB / 1.27kB 8.96MB / 21.5kB 2
可视化
portainer