官方文档:https://docs.docker.com/
- 查看操作系统版本
cat /etc/redhat-release
- 卸载旧版本
[root@VM-8-2-centos local]# yum remove docker > docker-client > docker-client-latest > docker-common > docker-latest > docker-latest-logrotate > docker-logrotate > docker-engine #系统里没有所以没有匹配到,无伤大雅 Loaded plugins: fastestmirror, langpacks No Match for argument: docker No Match for argument: docker-client No Match for argument: docker-client-latest No Match for argument: docker-common No Match for argument: docker-latest No Match for argument: docker-latest-logrotate No Match for argument: docker-logrotate No Match for argument: docker-engine No Packages marked for removal
- 设置镜像
[root@VM-8-2-centos etc]# yum install -y yum-utils Loaded plugins: fastestmirror, langpacks Loading mirror speeds from cached hostfile epel | 4.7 kB 00:00:00 extras | 2.9 kB 00:00:00 os | 3.6 kB 00:00:00 updates | 2.9 kB 00:00:00 (1/2): epel/7/x86_64/updateinfo | 1.0 MB 00:00:00 (2/2): epel/7/x86_64/primary_db | 7.0 MB 00:00:00 Package yum-utils-1.1.31-54.el7_8.noarch already installed and latest version Nothing to do [root@VM-8-2-centos etc]# yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo Loaded plugins: fastestmirror, langpacks adding repo from: http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo grabbing file http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo to /etc/yum.repos.d/docker-ce.repo repo saved to /etc/yum.repos.d/docker-ce.repo
- 更新一下软件索引
yum makecache fast
- 安装docker, -ce 社区版本
yum -y install docker-ce docker-ce-cli containerd.io
- 启动docker
systemctl start docker
- 查看版本,运行hello-world
docker version
[root@VM-8-2-centos local]# docker run hello-world
Hello from Docker!
This message shows that your installation appears to be working correctly.
To generate this message, Docker took the following steps:
1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
(amd64)
3. The Docker daemon created a new container from that image which runs the
executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it
to your terminal.
To try something more ambitious, you can run an Ubuntu container with:
$ docker run -it ubuntu bash
Share images, automate workflows, and more with a free Docker ID:
https://hub.docker.com/
For more examples and ideas, visit:
https://docs.docker.com/get-started/
- 查看本地镜像
[root@VM-8-2-centos local]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 7 months ago 13.3kB
- 镜像加速,腾讯云不支持个人版,阿里云可以试一下
- 镜像(image):一个只读模板,可以创建出很多容器,相当于Java的类模板 class,一个类可以创建很多实例对象
- 容器(container):由镜像实例化来的独立运行的一个或一组应用,可以把它看成是一个微型的linux环境,可以被启动、开始、停止、删除,容器之间是相互隔离的。
- 仓库(repository):存放镜像文件的场所
- docker是一个Client-Server结构的系统
- docker运行在远程主机上,用户可以通过socket连接从客户端访问
- 守护进程接受客户端发送的命令并管理运行在远程主机的容器
1. 帮助命令官方文档:https://docs.docker.com/engine/reference
- 查看版本、查看基本信息、查看帮助信息
docker version docker info docker 命令 --help2. 镜像命令
- docker images :查看所有镜像
[root@VM-8-2-centos docker]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE hello-world latest feb5d9fea6a5 7 months ago 13.3kB ### --all , -a 查看所有镜像 ### --quiet , -q 只显示镜像ID
- docker search [OPTIONS] :搜索Docker Hub中的镜像
[root@VM-8-2-centos docker]# docker search mysql NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12468 [OK] mariadb MariaDB Server is a high performing open sou… 4802 [OK] mysql/mysql-server Optimized MySQL Server Docker images. Create… 922 [OK] percona Percona Server is a fork of the MySQL relati… 575 [OK] phpmyadmin phpMyAdmin - A web interface for MySQL and M… 513 [OK] mysql/mysql-cluster Experimental MySQL Cluster Docker images. Cr… 93 centos/mysql-57-centos7 MySQL 5.7 SQL database server 93 bitnami/mysql Bitnami MySQL Docker Image 69 [OK] ubuntu/mysql MySQL open source fast, stable, multi-thread… 31 circleci/mysql MySQL is a widely used, open-source relation… 25 mysql/mysql-router MySQL Router provides transparent routing be… 23 google/mysql MySQL server for Google Compute Engine 21 [OK]
####--filter , -f 加上过滤条件 [root@VM-8-2-centos docker]# docker search mysql -f=stars=3000 NAME DESCRIPTION STARS OFFICIAL AUTOMATED mysql MySQL is a widely used, open-source relation… 12468 [OK] mariadb MariaDB Server is a high performing open sou… 4802 [OK]
- docker pull NAME:TAG:下载镜像
[root@VM-8-2-centos docker]# docker pull mysql Using default tag: latest ### 没写tag默认下载最新的 latest: Pulling from library/mysql 4be315f6562f: Pull complete ### 分层下载,docker images的核心 96e2eb237a1b: Pull complete 8aa3ac85066b: Pull complete ac7e524f6c89: Pull complete f6a88631064f: Pull complete 15bb3ec3ff50: Pull complete ae65dc337dcb: Pull complete 654aa78d12d6: Pull complete 6dd1a07a253d: Pull complete a32905dc9e58: Pull complete 152d41026e44: Pull complete 42e0f73ebe32: Pull complete Digest: sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d ### 签名 Status: Downloaded newer image for mysql:latest docker.io/library/mysql:latest ###真实的下载地址
### 带tag 得是在Docker Hub中存在的版本 docker pull mysql:debian
- docker rmi IMAGEID :删除镜像,删除多个就用空格间隔开,-f 强制删除
[root@VM-8-2-centos docker]# docker rmi f2ad9f23df82 Untagged: mysql:latest Untagged: mysql@sha256:fc77d54cacef90ad3d75964837fad0f2a9a368b69e7d799665a3f4e90e600c2d Deleted: sha256:f2ad9f23df82a3e5efabd1574b862a94c0657c73a6179efec07d5cf9ae5a307f Deleted: sha256:1842e304c411836d9e690b82bb7f5b84c543d752b708ac0ddc0f7a85afc39144 Deleted: sha256:d9b83ca1899c00aac07632965971e9b85f702edb1bdf4f04b796a6d07fd15e2f Deleted: sha256:ddbfed04654bf4c03b7e1036c1a99130cbcdbeaafc65684c6eaf50824fb0c110 Deleted: sha256:8ae2def9b47405bfdeff47f5246ce2b38c568303156200229cc69af84b0438b3 Deleted: sha256:7c52f329d0b5360c594770d0afc87d6902a33b453f12c129b52f6287f81ae111 Deleted: sha256:625e297c59e84d9cb5ae0dcd69714dcc7f3c823c281cce1616374232057c8fa9 Deleted: sha256:52994d077831159b79c473125916eb6874cebf38493e3046abe80935e181d8af Deleted: sha256:9550bb960b1438abbdc93a0a5518055f4a455bbd65491e53fa795960ddf518a5 Deleted: sha256:d3dee54c8b55b10f9fe4100dd1fa6e59f98dbfbf84b5757f518d874f57acd1ec Deleted: sha256:49ff85d13492ccda474015e5e7101f35e8cee2f4b23d2385195d8a897b4be097 Deleted: sha256:7310671d54d99fba70b7191bca28f8e9a4b5438c4b012a2ceca11cae17d3177b Deleted: sha256:0ad3ddf4a4ce0fc9d65021897541c99e5497a11ced2419016147267df61732d3
### 删除查询出来的所有镜像 docker rmi -f $(docker images -aq)3. 容器命令
- 有镜像才能创建容器实例,这里使用centos镜像来做测试
docker pull centos
- docker run :创建并运行一个容器
docker run [OPTIONS] IMAGE [COMMAND] [ARG...] --name 指定容器实例的名字 -d 后台运行模式并打印容器ID -it 使用交互方式运行,可以进入容器查看内容 -p 指定容器端口 -p 8080 这里的端口是容器暴露给主机的端口而不是给外部访问的端口 -p 80:8080 制动容器端口为8080并和主机端口80绑定 -p 不写就会使用随机端口
### -it 启动并进入容器 后面接控制台的类型bash 或者 shell,使用exit可以退出容器 [root@VM-8-2-centos redis]# docker run -it centos /bin/bash [root@e07a1dd6520e /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@e07a1dd6520e /]# exit exit
- docker ps:查看正在运行的容器,-a 查看历史运行记录,-n=? 显示最近创建的容器后接个数,-q 只显示容器id
[root@VM-8-2-centos redis]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e07a1dd6520e centos "/bin/bash" 5 minutes ago Exited (0) 2 minutes ago eager_brahmagupta e8b8175e6fbd hello-world "/hello" 23 hours ago Exited (0) 23 hours ago heuristic_jepsen 3f4ca360f955 hello-world "/hello" 23 hours ago Exited (0) 23 hours ago romantic_carver
- 进入容器后退出容器的几种方式
exit 退出并停止运行容器 Ctrl + P + Q 退出但不停止运行
- docker rm CONTAINERID :删除容器,-f 强制删除,
### 不能删除正在运行的容器,要删除正在运行的容器得使用 -f 强制删除 [root@VM-8-2-centos redis]# docker rm 3f4ca360f955 3f4ca360f955
docker rm -f $(docker ps -aq) ###强制删除所有容器 docker ps -a -q|xargs docker rm ###删除所有容器
- 启动和停止容器的操作
docker start [CONTAINER ID] 启动一个或多个容器 docker restart [CONTAINER ID] 重启一个或多个容器 docker stop [CONTAINER ID] 停止一个或多个容器 docker kill [CONTAINER ID] 强制停止一个或多个容器
[root@VM-8-2-centos redis]# docker start e07a1dd6520e e07a1dd6520e [root@VM-8-2-centos redis]# docker restart e07a1dd6520e e07a1dd6520e [root@VM-8-2-centos redis]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES e07a1dd6520e centos "/bin/bash" 53 minutes ago Up 6 seconds eager_brahmagupta [root@VM-8-2-centos redis]# docker stop e07a1dd6520e e07a1dd6520e [root@VM-8-2-centos redis]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES4. 常用命令及可能遇到的问题
- 后台启动容器,通过ps命令可以发现没有容器正在运行,这是因为docker容器后台运行就必须有一个前台进程在工作,否则docker发现没有应用在工作就会自动停止
[root@VM-8-2-centos redis]# docker run -d centos 749f0f4c9f0f70962c3c6c0d08e9407a8b649fde38d1b104952a88d4b6b2100a [root@VM-8-2-centos redis]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@VM-8-2-centos redis]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 749f0f4c9f0f centos "/bin/bash" 14 seconds ago Exited (0) 14 seconds ago pensive_agnesi
- docker logs:查看容器日志
docker logs -f -t --tail 10 749f0f4c9f0f -f 跟踪日志输出,日志会刷新 -t 显示时间戳 --tail num 从日志末尾开始显示指定的行数,后面跟要输出的行数
- docker top [CONTAINER ID] :查看容器内进程ID
[root@VM-8-2-centos ~]# docker top c045b9e9936a UID PID PPID C STIME TTY TIME CMD root 9644 9624 0 16:36 ? 00:00:00 /bin/sh -c while true;do echo ambition; sleep 1;done root 9717 9644 0 16:36 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
- docker inspect:查看容器内部信息
- docker exec:进入一个正在运行的容器
[root@VM-8-2-centos ~]# docker exec -it c045b9e9936a /bin/bash [root@c045b9e9936a /]# ls bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var [root@c045b9e9936a /]# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 08:36 ? 00:00:00 /bin/sh -c while true;do echo ambition; sleep 1;done root 1131 0 0 08:54 pts/0 00:00:00 /bin/bash root 1153 1 0 08:54 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1 root 1154 1131 0 08:54 pts/0 00:00:00 ps -ef
- docker attach:进入容器正在运行的终端,将本地标准输入、输出和错误流附加到正在运行的容器,和上面的区别就是上面开启了一个新的终端窗口,而这个不会
- docker cp :从容器中复制文件到主机
[root@VM-8-2-centos ~]# docker run -it centos /bin/bash [root@6146c407e9da /]# cd home/ [root@6146c407e9da home]# ls [root@6146c407e9da home]# touch test.java [root@6146c407e9da home]# exit exit [root@VM-8-2-centos ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6146c407e9da centos "/bin/bash" 6 minutes ago Exited (0) 9 seconds ago tender_aryabhata [root@VM-8-2-centos ~]# docker cp 6146c407e9da:/home/test.java /home [root@VM-8-2-centos ~]# cd /home [root@VM-8-2-centos home]# ls lighthouse test.java
- 用完即删的启动命令 –rm,容器停止后自动删除容器,通常用于测试
docker run -it --rm tomcat:9.05. 练习
- 测试安装tomcat镜像并启动,启动成功后访问发现404,进入容器查看webapps文件夹发现是空的,将webapps.dist文件拷贝到webapps能正常访问tomcat首页
[root@VM-8-2-centos ~]# docker start 8d349043b9b5 8d349043b9b5 [root@VM-8-2-centos ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8d349043b9b5 tomcat:9.0 "catalina.sh run" 2 minutes ago Up 4 seconds 0.0.0.0:80->8080/tcp, :::80->8080/tcp tomcat01 [root@VM-8-2-centos ~]# docker exec -it 8d349043b9b5 /bin/bash root@8d349043b9b5:/usr/local/tomcat# ls BUILDING.txt CONTRIBUTING.md LICENSE NOTICE README.md RELEASE-NOTES RUNNING.txt bin conf lib logs native-jni-lib temp webapps webapps.dist work root@8d349043b9b5:/usr/local/tomcat# cd webapps.dist root@8d349043b9b5:/usr/local/tomcat/webapps.dist# ls ROOT docs examples host-manager manager root@8d349043b9b5:/usr/local/tomcat/webapps.dist# cd ../ root@8d349043b9b5:/usr/local/tomcat# cp -r webapps.dist/* webapps root@8d349043b9b5:/usr/local/tomcat# cd webapps root@8d349043b9b5:/usr/local/tomcat/webapps# ls ROOT docs examples host-manager manager
- 安装es+kibana
docker run -d --name elasticsearch -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" elasticsearch:7.17.3
[root@VM-8-2-centos ~]# curl localhost:9200
{
"name" : "74df5327328b",
"cluster_name" : "docker-cluster",
"cluster_uuid" : "bXvaefrnTGSchL0NXhaJvw",
"version" : {
"number" : "7.17.3",
"build_flavor" : "default",
"build_type" : "docker",
"build_hash" : "5ad023604c8d7416c9eb6c0eadb62b14e766caff",
"build_date" : "2022-04-19T08:11:19.070913226Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
### 限制使用的内存大小 [root@VM-8-2-centos ~]# docker run -d --name elasticsearch02 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx500m" elasticsearch:7.17.36. 可视化面板
- 安装portainer/portainer-ce,这里选择连接本地做测试,启动成功后访问页面 IP:8088,首次登录需要设置管理员密码
[root@VM-8-2-centos ~]# docker run -d -p 8088:9000 --restart=always -v /var/run/docker.sock:/var/run/docker.sock --privileged=true portainer/portainer-ce五、Docker镜像 1. docker镜像原理
2. commit镜像(在容器中修改后提交作为新的镜像)docker镜像由多个只读文件系统叠加组成,当使用者启动镜像时,docker会在文件系统的栈顶新增一个读写层,用户在容器中做的操作都在读写层中记录,所以镜像是可以供多个容器复用的。
[root@VM-8-2-centos ~]# docker commit -a="ambition" -m="add webapps" 8d349043b9b5 tomcat02:1.0 sha256:e87c8c1b0b0f7ecf848021258f9ab6a77478a0d950c85a5a7d91c9b4cc8e7073 [root@VM-8-2-centos ~]# docker images REPOSITORY TAG IMAGE ID CREATED SIZE tomcat02 1.0 e87c8c1b0b0f 4 seconds ago 685MB portainer/portainer-ce latest a4844528206d 6 days ago 277MB tomcat 9.0 6705ea17274a 2 weeks ago 680MB nginx latest fa5269854a5e 3 weeks ago 142MB elasticsearch 7.17.3 3c91aa69ae06 3 weeks ago 613MB hello-world latest feb5d9fea6a5 7 months ago 13.3kB centos latest 5d0da3dc9764 7 months ago 231MB



