docker和k8s一样基于go语言开发,为容器中的一种。
什么是容器?一般说的容器指的是linux容器,指的是一组收到资源限制、彼此相互隔离的进程。
多看官方文档:https://docs.docker.com/
安装docker-cedocker组成:client、server、repository
学习安装版本19.03.8,centos7,内核在3.10.以上
安装
安装指引:https://docs.docker.com/engine/install/centos/,跳转get started
-
移除旧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 https://download.docker.com/linux/centos/docker-ce.repo
-
安装engine
sudo yum install docker-ce docker-ce-cli containerd.io
如果安装指定版本,
yum list docker-ce --showduplicates | sort -r
例如19.03.8,则为docker-ce-19.03.8
-
启动docker的daemon进程
yum makecache fast systemctl start docker
-
登录docker id
docker login #登录一次即可记住密码
-
运行hello-world
docker run hello-world
启动顺序:先从本地repository寻找hello-world镜像→没有则去docker hub找,找到就pull下来,启动
-
配置阿里镜像加速
登录阿里云:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors,将mirrors地址修改为加速地址,每人一个。
sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://n6eullnk.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker底层原理
docker为什么比vm快?
-
docker有比虚拟机更少的抽象层
-
docker直接运行在宿主机内核上,而vm需要guest os
也就是说,vm需要加载bootfs和rootfs,docker不需要重新引导加载一个 *** 作系统内核,只需要加载rootfs即可,所以比vm快。
官方帮助文档:https://docs.docker.com/engine/reference/run/
docker $cmd --help docker version docker info镜像命令
#show docker images -a #显示所有镜像 docker images -aq #只显示镜像id #search docker search mysql --filter=STARS=1000 #download docker pull 镜像名[:tag] [root@master docker]# docker pull mysql:5.7 5.7: Pulling from library/mysql a10c77af2613: Pull complete #层级下载,docker images的核心 联合文件系统 b76a7eb51ffd: Pull complete 258223f927e4: Pull complete 2d2c75386df9: Pull complete 63e92e4046c9: Pull complete f5845c731544: Pull complete bd0401123a9b: Pull complete 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 #不指定版本就是docker pull mysql相当于docker pull mysql:latest #delete docker rmi -f $imageid #删除指定镜像 docker rmi $(docker images -qa) #删除所有镜像容器命令
docker pull centos新建并启动容器、退出容器
docker run [可选参数] $image $cmd #这里的$image可以是镜像名,也可以是镜像id #可选参数说明 --name="centos_test" #容器名称,用来区分容器,唯一 --it #使用交互命令进入容器 -d #后台方式运行 -p #指定端口 -p ip:主机端口:容器端口 -p 主机端口:容器端口 -p 容器端口 -P #随机端口 #例如: [root@master docker]# docker run -it --name="centosTest" centos /bin/bash [root@006a8fefaa3e /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@006a8fefaa3e /]# exit exit [root@master docker]# #image默认是带了latest标签,当非latest的image时,启动需要指定标签,例如: [root@master download]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE nginx stable aedf7f31bdab 3 days ago 141MB centos latest 5d0da3dc9764 2 months ago 231MB [root@master download]# docker run -d --name="nginx01" nginx Unable to find image 'nginx:latest' locally ^C [root@master download]# docker run -d --name="nginx01" nginx:stable 8c8d36840b1f4689e60d4e71ad7df968b883ec8c136c44873129b2bf3024e7e0列出容器
docker ps #列出正在运行的容器 -a #列出正在运行+历史运行过的容器 -q #只列出容器id -n= #列出n个最近创建的容器退出容器
exit #退出并停止容器,如果容器中有前台进程未结束,不会停止容器 ctrl + P + Q #退出不停止容器 #例如: [root@master docker]# docker exec -it a8018e7463bf /bin/sh sh-4.4# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var sh-4.4# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 10:19 ? 00:00:08 /bin/sh -c while true;do echo hello-beauty;sleep 0.5;done root 13944 0 0 12:17 pts/0 00:00:00 /bin/sh root 14100 1 0 12:18 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 0.5 root 14101 13944 0 12:18 pts/0 00:00:00 ps -ef sh-4.4# logout sh: logout: not login shell: use `exit' sh-4.4# exit exit [root@master docker]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a8018e7463bf centos "/bin/sh -c 'while t…" 2 hours ago Up 2 hours centos_test1删除容器
docker rm 容器id #正在运行的不允许删除,如要删除需要加 -f docker rm -f $(docker ps -aq) #强制删除所有容器 docker ps -aq|xargs docker rm -f #强制删除所有容器启动和停止容器
docker start 容器id #docker run 相当于执行了docker create + docker start docker restart 容器id docker stop 容器id docker kill 容器id #强制停止当前容器docker run启动容器时,docker在后台做了啥?
- 检查本地是否存在指定镜像,如不存在则pull
- 利用镜像创建并启动一个容器,相当于docker create、docker start
- 分配一个rootfs文件系统,并在只读镜像层外面再挂一个读写层
- 从宿主机网桥接口中桥接一个虚拟接口到容器
- 从地址池中分配一个ip给容器
- 指定用户指定的应用程序
- 执行完毕后发现没有运行进程则停止容器
docker run -d $image
注意:如果容器运行后没有前台进程,即使用-d启动了,也不会在后台运行,会立即停止。所以上面容-d启动centos会立即退出。
[root@master docker]# docker run --name="centos_test1" -d centos /bin/sh -c "while true;do echo hello-beauty;sleep 0.5;done" a8018e7463bf9ad8d5b7917cf18fa7032a026c4eb78c239392b4953961627716 [root@master docker]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a8018e7463bf centos "/bin/sh -c 'while t…" 7 seconds ago Up 6 seconds centos_test1
docker run --rm #容器进程停止后自动删除,一般用于测试 -v 容器路径:docker内路径 #做路径映射 --restart=always #容器退出时总是重启容器,默认为no查看容器日志
docker logs -tf --tail 条数 #类似于tail -f
例如:
[root@master docker]# docker logs -tf --tail 4 a8018e7463bf 2021-11-20T10:22:39.601730830Z hello-beauty 2021-11-20T10:22:40.117446018Z hello-beauty 2021-11-20T10:22:40.633493993Z hello-beauty 2021-11-20T10:22:41.148728319Z hello-beauty 2021-11-20T10:22:41.664642020Z hello-beauty查看容器中的进程信息
docker top 容器id
例如:
[root@master docker]# docker top a8018e7463bf UID PID PPID C STIME TTY TIME CMD root 9969 9952 0 18:19 ? 00:00:00 /bin/sh -c while true;do echo hello-beauty;sleep 0.5;done root 11031 9969 0 18:25 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 0.5查看容器信息
docker inspect 容器id docker stats #查看容器资源使用状态进入运行的容器
#方式一: docker exec -it 容器id $cmd [root@master docker]# docker exec -it a8018e7463bf /bin/sh sh-4.4# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var #方式二: docker attach [options] 容器id [root@master docker]# docker attach a8018e7463bf hello-beauty hello-beauty hello-beauty hello-beauty hello-beauty 两种方式的区别:方式一进入容器内工作目录,启动一个新的进程,方式二进入正在运行的程序的界面。拷贝容器内文件到宿主机
docker cp 容器id:文件目录 宿主机目录 [root@master yiyu]# docker cp a8018e7463bf:/test.ss ./练习
-
安装tomcat
-
安装nginx
-
安装es和kibana
[root@master download]# docker run -d --name="elasticsearch" -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2 7b31d3bfe95989f8f5d9ce9cc0a9e878deaeed1e51bdd719079a273b6af1e988
安装portainer可视化面板,了解即可
[root@master download]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer:portainerdocker镜像原理
iamge有层级结构,docker image inspect 镜像名最下面的layers就是它的层级。
[root@master download]# docker image inspect portainer/portainer ... "RootFS": { "Type": "layers", "Layers": [ "sha256:8dfce63a73970a18bcc2ca447d9c252aedd3157e9ee02a88e66c53571279aee9", "sha256:11bdf2a940a7eb35fe69359d45eaeb6f8553a682a19e26db49d4c924588bb6c4", "sha256:658693958bcb13c9d33a49d82f1e1297073066bec8d8b07dd49357ad5c08ce58"
docker pull下载的都是只读镜像层,docker run或者修改内容就相当于增加了一层容器层,commit后可以打包成镜像层。
提交docker镜像docker commit -a="author" -m="desc" 镜像id 名称:标签 #运行基础镜像容器(以tomcat:9.0为例) [root@master ~]# docker run -it --name="tomcat_local" -p 8080:8080 tomcat:9.0 Using CATALINA_base: /usr/local/tomcat Using CATALINA_HOME: /usr/local/tomcat Using CATALINA_TMPDIR: /usr/local/tomcat/temp ... 22-Nov-2021 12:28:01.580 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in [55] milliseconds #进入容器,添加自定义内容 [root@master ~]# docker ps ConTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 0dbddcc71eb1 tomcat:9.0 "catalina.sh run" 36 seconds ago Up 34 seconds 0.0.0.0:8080->8080/tcp tomcat_local [root@master ~]# docker exec -it 0dbddcc71eb1 /bin/bash root@0dbddcc71eb1:/usr/local/tomcat# cp webapps.dist/* webapps/ -r root@0dbddcc71eb1:/usr/local/tomcat# ls webapps ROOT docs examples host-manager manager #退出容器,测试,然后commit到本地repository [root@master ~]# curl -I localhost:8080 HTTP/1.1 200 Content-Type: text/html;charset=UTF-8 Transfer-Encoding: chunked Date: Mon, 22 Nov 2021 12:34:52 GMT [root@master ~]# docker commit -a="yiyu" -m="tomcat9.0 test version for local;added webapps dic" 0dbddcc71eb1 tomcat_local:1.0 sha256:c0855d5befbdeda543819e1b7d27a08c44642096ce54c...803a0e19f7aed [root@master ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat_local 1.0 c0855d5befbd 11 seconds ago 685MB tomcat 9.0 76206e3ba4b1 3 days ago 680MB
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)