docker组成:docker客户端 、docker服务器端 、docker镜像 、docker容器css
Doeker容器:开源容器引擎,打包可移植,沙箱机制,轻量级html
1. 虚拟机node
2. 使用复杂linux
3. 启动过程相对慢(分钟)nginx
4. 模版文件较大redis
5. 和物理彻底隔离sql
6. 模拟的是一个完整系统,能够登陆并实现管理docker
1. 直接虚拟出来一个用户空间apache
2. 使用简单json
3. 启动很是块(秒级)
4. 模版文件很小
5. 在必定程度上和物理机隔离
6. 仅仅是模拟一部分用户空间,不方便管理
须要提早配置的yum源:epel,extra,本地源
第一步:须要下载阿里云较新版的docker源文件
[root@ken-node3 ~]# wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
第二步:移动文件到yum.repos.d下
[root@ken-node3 ~]# mv docker-ce.repo /etc/yum.repos.d/
第三步:下载docker-ce
docker-ce 社区免费版
docker-ee 企业收费版
[root@ken-node3 ~]# yum install docker-ce -y
第四步:直接启动docker并设置开机自启
[root@ken-node3 ~]# systemctl restart docker
[root@ken-node3 ~]# systemctl enable docker
https://www.cnblogs.com/modestlin/p/11629026.html 出现container-selinux 版本不符的问题是,可依据该博客内容进行
注:
若是不启动docker服务会报以下的错误:
[root@ken-node3 ~]# docker image ls
Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?
第五步:验证docker服务是否能够正常运行
[root@ken1 ~]# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
为何镜像加速?
由于docker在拉取镜像的时候是默认使用dockerhub上面的镜像即国外镜像,因此拉取速度是很慢的,
为了解决这个问题,咱们就能够使用阿里云镜像加速
第一步:浏览器输入阿里云进入官网并登录
略
第二步:进入控制台–》产品与服务–》容器镜像服务–》镜像加速器
第三步:建立一个脚本写入以下内容
略
#!/bin/bash wget https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo mv docker-ce.repo /etc/yum.repos.d sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
docker镜像操做相关的指令
docker使用技巧:
[root@ken-node3 ~]# docker –help #能够查看docker全部使用方法
[root@ken-node3 ~]# docker image –help #能够查看docker镜像操做的全部方法
[root@ken-node3 ~]# docker image ls –help #能够查看docker镜像操做中ls指令的用法
镜像操做指令:
build 从dockerfile中建立镜像
history 能够显示镜像的构建历史 #docker镜像分层构建,每一层都有一个指令
import 从一个压缩包建立镜像
save 建立镜像压缩包
load 从压缩包导入镜像
ls 列出来镜像
prune 清除不使用的镜像
pull 拉取镜像
push 推送镜像
rm 删除镜像
tag 更名
例子1:拉取镜像
格式:docker image pull REPOSITORY:TAG
[root@ken1 ~]# docker image pull busybox
注意:
若是在拉取镜像的时候只指定了REPOSITORY的话,默认拉取的是tag为latest的版本
例子2:查看当前有哪些镜像
[root@ken1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 db8ee88ad75f 3 weeks ago 1.22MB busybox latest db8ee88ad75f 3 weeks ago 1.22MB
例子3:查看镜像构建历史
[root@ken1 ~]# docker image history busybox IMAGE CREATED CREATED BY SIZE COMMENT db8ee88ad75f 3 weeks ago /bin/sh -c #(nop) CMD ["sh"] 0B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:9ceca008111a4ddff… 1.22MB
例子4:制做镜像压缩包
方法一:使用-o选项,output
[root@ken1 ~]# docker image save busybox:1.31.0 -o busybox1.31.tar [root@ken1 ~]# ls anaconda-ks.cfg busybox1.31.tar docker-speend.sh test test1
方法二:使用标准输出
[root@ken1 ~]# docker image save busybox:1.31.0 > busybox1.31-v2.tar [root@ken1 ~]# ls anaconda-ks.cfg busybox1.31.tar busybox1.31-v2.tar docker-speend.sh test test1
例子5:使用镜像压缩包
方法一:使用-i,input
[root@ken-node3 ~]# docker image load -i busybox1.31.tar Loaded image: busybox:1.31.0 [root@ken-node3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 db8ee88ad75f 3 weeks ago 1.22MB
方法二:
[root@ken-node3 ~]# docker image load < busybox1.31.tar Loaded image: busybox:1.31.0 [root@ken-node3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 db8ee88ad75f 3 weeks ago 1.22MB
例子6:删除镜像
方法一:
[root@ken1 ~]# docker image rm busybox:1.31.0 Untagged: busybox:1.31.0 [root@ken1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox latest db8ee88ad75f 3 weeks ago 1.22MB
方法二:
[root@ken1 ~]# docker rmi busybox
例子7:镜像更名
[root@ken1 ~]# docker image tag busybox:1.31.0 busybox:latest [root@ken1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE busybox 1.31.0 db8ee88ad75f 3 weeks ago 1.22MB busybox latest db8ee88ad75f 3 weeks ago 1.22MB
例子8:清除不常常使用的镜像
[root@ken1 ~]# docker image prune -f
Total reclaimed space: 0B
run 运行容器
commit 使用当前运行的容器制做镜像
exec 能够在容器中执行命令或者进入容器
inspect 查看容器的详细信息,也能够查看镜像的信息
kill 强制杀掉容器
logs 查看容器产生的日志信息
ls 查看当前运行的容器
ps 查看当前运行的容器
pause 暂停容器
unpause 开启容器
port 查看容器端口映射信息
rename 对容器更名
restart 重启容器
start 启动容器
stop 停掉容器
rm 删除容器,默认删除不了正在运行的容器,-f
stats 查看容器的运行状态
top 查看容器的系统内存,磁盘使用信息
例子1:启动容器
前台运行容器
[root@ken1 ~]# docker run -i -t busybox /bin/sh
-i 交互模式
-t分配终端
后台运行容器
[root@ken1 ~]# docker run -d nginx-game:v1
-d后台运行
例子2:查看正在运行的容器
[root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 95a695cffb03 nginx-game:v1 "nginx -g 'daemon of…" About a minute ago Up About a minute 0.0.0.0:88->80/tcp hardcore_shannon
查看正在运行以及已经退出的容器
[root@ken1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 95a695cffb03 nginx-game:v1 "nginx -g 'daemon of…" 3 minutes ago Up 3 minutes 0.0.0.0:88->80/tcp hardcore_shannon 40799b6b38f2 busybox "/bin/sh" 7 minutes ago Exited (0) 6 minutes ago infallible_benz ac864729390b busybox "/bin/bash" 7 minutes ago Created elastic_swartz adbc635a8bf1 busybox "ip a" 8 minutes ago Exited (0) 8 minutes ago nervous_noyce
例子3:在容器外执行命令
[root@ken1 ~]# docker exec -it 95a695cffb03 ls bin dev home lib64 mnt proc run srv tmp var boot etc lib media opt root sbin sys usr
注意:
若是你要想操做容器的话,必须保证容器时up状态即正在运行的状态,exited状态的容器时没法进行操做的。
例子1:查看正在运行的容器
[root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
例子2:查看全部的容器包括已经中止运行的容器
[root@ken1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9105c43602d9 nginx-game:v1 "nginx -g 'daemon of…" 32 minutes ago Exited (0) 13 minutes ago laughing_moser 2c85ff7cc53b nginx-game:v1 "nginx -g 'daemon of…" 19 hours ago Exited (0) 9 hours ago ecstatic_blackburn 6a1d4f6a015c nginx-game:v1 "nginx -g 'daemon of…" 22 hours ago Exited (0) 22 hours ago youthful_kowalevski 95a695cffb03 nginx-game:v1 "nginx -g 'daemon of…" 22 hours ago Exited (137) 22 hours ago hardcore_shannon 40799b6b38f2 busybox "/bin/sh" 22 hours ago Exited (0) 22 hours ago infallible_benz ac864729390b busybox "/bin/bash" 22 hours ago Created elastic_swartz adbc635a8bf1 busybox "ip a" 22 hours ago Exited (0) 22 hours ago nervous_noyce
例子3:删除一个容器
方法一:长ID
[root@ken1 ~]# docker rm 9105c43602d9 9105c43602d9
方法二:短ID
[root@ken1 ~]# docker rm 2c85ff7 2c85ff7
方法三:容器名
[root@ken1 ~]# docker rm youthful_kowalevski youthful_kowalevski
注意:删除镜像同样!
例子4:后台运行容器
[root@ken1 ~]# docker run -d nginx-game:v1 72f712bff84eff8ad0b371291ff488d21f25aca69c2f08a1fd52dd2718d2158c [root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" 4 seconds ago Up 3 seconds 80/tcp laughing_lovelace
例子5:运行容器加多个参数
[root@ken1 ~]# docker run --name nginxtest -d --rm nginx-game:v1 2cdec372f4350dea46b9fc6ce37d14314a4ef1351f2ec10da662aa36919b6bbe [root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 2cdec372f435 nginx-game:v1 "nginx -g 'daemon of…" 3 seconds ago Up 2 seconds 80/tcp nginxtest
–name 指定容器名字
-d 后台运行
–rm 容器停掉以后自动删除
例子6:批量删除容器
[root@ken1 ~]# docker rm $(docker ps -aq) 95a695cffb03 40799b6b38f2 ac864729390b adbc635a8bf1
注意:
这样只能删除已经退出的容器,没法删除正在运行的容器
若是也想要删掉正在运行的容器,能够在docker rm 后加-f选项进行强制删除
例子7:查看容器信息
[root@ken1 ~]# docker inspect 72f712bff84e
注:
查看容器暴露的端口:
方法一:
docker history IMAGE_ID
方法二:
查看容器详细信息 docker inspect CONTAINER_ID
例子8:查看容器运行状态
[root@ken1 ~]# docker stats 72f712bff84e CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS 72f712bff84e laughing_lovelace 0.00% 1.344MiB / 1.779GiB 0.07% 648B / 0B 0B / 0B 2
例子9:对容器内存使用量进行限制
[root@ken1 ~]# docker run -d -m 64M nginx-game:v1
-m选项指定容器能够使用的内存量
例子10:中止容器
[root@ken1 ~]# docker stop 8cd65493c7c1 8cd65493c7c1 [root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" 15 minutes ago Up 15 minutes 80/tcp laughing_lovelace
例子11:启动容器
[root@ken1 ~]# docker start 8cd65493c7c1 8cd65493c7c1 [root@ken1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cd65493c7c1 nginx-game:v1 "nginx -g 'daemon of…" 2 minutes ago Up 1 second 80/tcp loving_sammet 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" 15 minutes ago Up 15 minutes 80/tcp laughing_lovelace
例子12:杀掉容器
[root@ken1 ~]# docker kill 8cd65493c7c1 8cd65493c7c1 [root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" 16 minutes ago Up 16 minutes 80/tcp laughing_lovelace [root@ken1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cd65493c7c1 nginx-game:v1 "nginx -g 'daemon of…" 2 minutes ago Exited (137) 6 seconds ago loving_sammet 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" 16 minutes ago Up 16 minutes 80/tcp laughing_lovelace
docker容器操做的kill和stop区别:
stop优雅退出。-15 10秒以后-9
kill -9
例子13:查看容器日志
[root@ken1 ~]# docker logs 8cd65493c7c1
持续刷新检测日志:
[root@ken1 ~]# docker logs 8cd65493c7c1 -f
-f 持续刷新
例子14:容器更名
[root@ken1 ~]# docker rename loving_sammet nginx-game
例子14:查看容器系统使用信息
[root@ken1 ~]# docker top nginx-game UID PID PPID C STIME TTY TIME CMD root 3054 3036 0 18:04 ? 00:00:00 nginx: master process nginx -g daemon off; 101 3088 3054 0 18:04 ? 00:00:00 nginx: worker process
例子15:暂停容器
[root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cd65493c7c1 nginx-game:v1 "nginx -g 'daemon of…" 12 minutes ago Up 9 minutes (Paused) 80/tcp nginx-game
例子16:再开启容器
[root@ken1 ~]# docker unpause nginx-game nginx-game [root@ken1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8cd65493c7c1 nginx-game:v1 "nginx -g 'daemon of…" 13 minutes ago Up 9 minutes 80/tcp nginx-game
例子17:查看容器端口映射信息
[root@ken1 ~]# docker port 8cd65493c7c1
例子18:进入容器
[root@ken1 ~]# docker exec -it 8cd65493c7c1 sh # # # # exit [root@ken1 ~]# docker exec -it 8cd65493c7c1 bash root@8cd65493c7c1:/# root@8cd65493c7c1:/# root@8cd65493c7c1:/#
能够选择使用sh和bash进入容器
总结:进入容器的方式:4种进入容器的方法
方法一:exec #在容器里面退出,容器自己不会退出
方法二:attach #容器自己退出 exitd
方法三:ssh
方法四:nsenter
实现了外部环境访问容器内部
四类端口映射:
第一类:把容器的端口随机映射为物理机的一个端口
第二类:把容器的端口映射为物理机特定的一个端口
第三类:把容器的端口映射为物理机特定网卡上的特定端口
第四类:把容器的端口映射为物理机特定网卡上的随机端口
第一类:把容器的端口随机映射为物理机的一个端口
使用的是大写的-P
[root@ken1 ~]# docker run -d -P httpd #随机映射为物理机的端口 cd662b604a59f6715b28c1af62956dbf665d5c4916897fbeb844e0e77ba8b99e [root@ken1 ~]# docker ps #能够查看到容器映射信息 CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cd662b604a59 httpd "httpd-foreground" 12 seconds ago Up 11 seconds 0.0.0.0:32768->80/tcp happy_cray 50405dd6b651 httpd "httpd-foreground" 6 minutes ago Up 6 minutes 80/tcp busy_ardinghelli 72f712bff84e nginx-game:v1 "nginx -g 'daemon of…" About an hour ago Up About an hour 80/tcp laughing_lovelace [root@ken1 ~]# ss -tnl #物理机启动会了相应的端口 State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::32768 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
或者
[root@ken1 ~]# docker port cd662b604a59 80/tcp -> 0.0.0.0:32768
注意:
使用-P选线。是把容器内全部expose的端口都映射为物理机的随机端口
第二类:把容器端口映射为物理机特色端口
使用的是小写的-p
[root@ken1 ~]# docker run -d -p 80:80 httpd #使用小写p进行特定端口映射 15a01c693f4c4ffc0774bcb535fc5ec415aec9944f295ae9d468915b35019fae [root@ken1 ~]# docker port 15a01c693f4c 80/tcp -> 0.0.0.0:80 [root@ken1 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::32768 :::* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::*
– p 80:80 第一个80是 物理机端口,第二个80是容器端口,顺序不能乱!另外物理机的端口不能被占用!
第三类:把容器端口映射为特色网卡上的随机端口
使用小写的p
[root@ken1 ~]# docker run -d -p 192.168.163.151::80 httpd ba79a389a467f56c31a0f8489c39a35c756d56bd6a53486d4bee68b3103589bf [root@ken1 ~]# docker port ba79a389a467f56c31a0f 80/tcp -> 192.168.163.151:32769
-p 192.168.163.151::80把容器的80端口随机映射为192.168.163.151上的一个随机端口
第四类:把容器端口映射为特色网卡上的特色端口
[root@ken1 ~]# docker run -d -p 192.168.163.151:81:80 httpd 64ce1f926979f66992a0377fabef5859b45d9466854649b457d741e3020257d6 [root@ken1 ~]# docker port 64ce1f926979f66 80/tcp -> 192.168.163.151:81 [root@ken1 ~]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 192.168.163.151:32769 *:* LISTEN 0 128 192.168.163.151:81 *:*
-p 192.168.163.151:81:80
把容器80端口映射为192.168.163.151上的81端口
总结;
1.在端口映射中使用到了两个选项一个是大写的P,表示把容器暴露的端口随机映射为物理机上的一个随机端口,不能指定特定网卡
2.另一个是小写的p,能够把容器暴露的端口映射为物理机特定的端口
3.或者映射为物理机特定网卡上的随机端口
4.或者特定网卡上的特定端口
制做镜像的方法:
方法一:
commit
使用commit制做镜像使基于一个现有的容器
方法二:
Dockefile
第一步:启动容器
[root@ken1 ~]# docker run -d httpd
第二步:修改网站首页文件
[root@ken1 ~]# docker exec -it 3cf31d57a61569c09c8024 bash root@3cf31d57a615:/usr/local/apache2# pwd /usr/local/apache2 root@3cf31d57a615:/usr/local/apache2# ls bin build cgi-bin conf error htdocs icons include logs modules root@3cf31d57a615:/usr/local/apache2# cd htdocs/ root@3cf31d57a615:/usr/local/apache2/htdocs# ls index.html root@3cf31d57a615:/usr/local/apache2/htdocs# echo "this is for testing commit" > index.html root@3cf31d57a615:/usr/local/apache2/htdocs# exit exit [root@ken1 ~]# curl 192.168.163.5:88 this is for testing commit
第三步:进行commit提交
[root@ken1 ~]# docker commit -p 3cf31d57a61569c09c8 nginx-com:v1 sha256:5de6e803346c00b4373ad2b49b9caf0dbe12f23a105d8a47c6e6aaca465ff6e6 [root@ken1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx-com v1 5de6e803346c 4 seconds ago 178MB
如今就能够把配置好的环境发送给其余人使用
第四步:把镜像制做成压缩包
[root@ken1 ~]# docker image save nginx-com:v1 > nginx-com.tar [root@ken1 ~]# ls anaconda-ks.cfg busybox1.31-v2.tar httpd_img.tar.gz nginx-game.tar test1 busybox1.31.tar docker-speend.sh nginx-com.tar test
第五步:进行发送
[root@ken1 ~]# scp nginx-com.tar 192.168.163.134:/root root@192.168.163.134's password: nginx-com.tar 100% 178MB 37.2MB/s 00:04
第六步:其余人进行使用
[root@ken-node3 ~]# docker image load < nginx-com.tar 9f5d674a9055: Loading layer [==================================================>] 7.168kB/7.168kB Loaded image: nginx-com:v1 [root@ken-node3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx-com v1 5de6e803346c Less than a second ago 178MB [root@ken-node3 ~]# docker run -d -p 87:80 nginx-com:v1 515ec3c0d991ea617dfa243096538d78ba323b1b96c2e8ab13f5d61f1d5ea45d [root@ken-node3 ~]# curl 192.168.163.134:87 this is for testing commit
镜像仓库
1,阿里云镜像仓库
2.dockerhub
3.registory私有镜像仓库
第一步:注册登陆
略
第二步:建立镜像仓库
第三步:命令行登陆阿里云
[root@ken1 ~]# docker login --username=kenkendyg registry.cn-hangzhou.aliyuncs.com Password: #是你注册的阿里云帐号密码 WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store Login Succeeded
第四步:更名
[root@ken1 ~]# docker tag nginx-com:v1 registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1 [root@ken1 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx-com v1 5de6e803346c 11 minutes ago 178MB registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com v1 5de6e803346c 11 minutes ago 178MB
第五步:推送
[root@ken1 ~]# docker push registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
第六步:查看
阿里云镜像版本
第七步:拉取
[root@ken-node3 ~]# docker pull registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
能够进行更名操做
第一步:首先查看相关镜像
[root@ken-node3 ~]# docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE nginx-com v1 5de6e803346c Less than a second ago 178MB registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com v1 5de6e803346c Less than a second ago 178MB
第二步:更名
[root@ken-node3 ~]# docker tag registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1 nginx-com:v1
第三步:删除相关镜像
[root@ken-node3 ~]# docker rmi registry.cn-hangzhou.aliyuncs.com/kenken/nginx-com:v1
镜像分类:
1,工具类的镜像(容器)
2,服务类的镜像(容器)
工具类镜像好比busybox,centos启动工具类镜像是使用交互模式docker run -it
服务类镜像好比nginx,redis,httpd启动服务类镜像使用的是docker -d