Docker基本组成
![](https://i-blog.csdnimg.cn/blog_migrate/1e739f7f00b1b05b805c0b9df7726955.png)
镜像(image):
docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,
tomcat镜像 ==> run ==> tomcat01容器(提供服务器),
通过这个镜像可以创建多个容器(最终服务运行或者项目运行就是在容器中的)。
容器(container):
Docker利用容器技术,独立运行一个或者一个组应用,通过镜像来创建的。
启动,停止,删除,基本命令!
目前就可以把这个容器理解为就是一个简易的linux系统
仓库(repository):
仓库就是存放镜像的地方!
仓库分为公有仓库和私有仓库!
安装Docker
环境准备
CentOS
远程连接服务器(我用的WindTerm)
环境查看
查看系统版本我这里用的Centos7
cat /etc/os-release
![](https://i-blog.csdnimg.cn/blog_migrate/df17e2c3e8c0f7ec81e29befa80a2e12.png)
![](https://i-blog.csdnimg.cn/blog_migrate/f79a0b3b0bc06654bbf65dcc14b864d5.png)
安装
官网连接Install Docker Engine on CentOS | Docker Documentation
卸载旧的版本
yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-engine
需要的安装包
yum install -y yum-utils
设置镜像仓库--国外的
yum-config-manager \
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
设置镜像仓库--阿里的(推荐)
yum-config-manager \
--add-repo \
http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
更新yum软件包索引
yum makecache fast
安装docker docker-ce社区版 ee企业版
yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin
启动
systemctl start docker
查看docker版本,是否启动成功
docker version
启动hello-world镜像 --本机没有这个镜像会自动去仓库中搜索,搜索到启动,搜索不到报错
docker run hello-world
查看hello-world镜像
docker images
![](https://i-blog.csdnimg.cn/blog_migrate/7a1265f32c5fe3b7bc161e1632d24f59.png)
配置阿里云镜像加速(可不配置)
登录成功进入控制台找到容器服务
![](https://i-blog.csdnimg.cn/blog_migrate/cbe55b55cccb65b1c51e24d57ea268eb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/cdb2981f6e9645ca7a215d48026fd090.png)
配置使用
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://6a7n8bhy.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
卸载
1.卸载依赖
yum remove docker-ce docker-ce-cli containerd.io docker-compose-plugin
2.删除资源
#/var/lib/docker docker的默认工作路径
rm -rf /var/lib/docker
rm -rf /var/lib/containerd
Docker运行镜像流程
![](https://i-blog.csdnimg.cn/blog_migrate/16fc49f355e93ce20aaae4a82c056052.png)
Docker常用命令
镜像命令
docker images
[root@localhost /]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest feb5d9fea6a5 13 months ago 13.3kB
#解释
REPOSITORY 镜像的仓库源
TAG 镜像的标签
CREATED 镜像的创建时间
SIZE 镜像的大小
#可选项
Options:
-a, --all # 列出所有镜像
-q, --quiet # 只显示镜像的id
docker search 镜像名 搜索镜像
[root@localhost ~]# docker search mysql
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13472 [OK]
mariadb MariaDB Server is a high performing open sou… 5142 [OK]
phpmyadmin phpMyAdmin - A web interface for MySQL and M… 689 [OK]
percona Percona Server is a fork of the MySQL relati… 593 [OK]
bitnami/mysql Bitnami MySQL Docker Image 79 [OK]
#可选项,通过搜索来过滤
--filter=STARS=3000 #搜索出来的镜像就是STARS大于3000的
[root@localhost ~]# docker search mysql --filter=STARS=3000
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
mysql MySQL is a widely used, open-source relation… 13472 [OK]
mariadb MariaDB Server is a high performing open sou… 5142 [OK]
docker pull 镜像名 下载镜像
#下载镜像 docker pull 镜像名[:tag]
[root@localhost ~]# docker pull mysql
Using default tag: latest #如果不写 tag,默认就是latest
latest: Pulling from library/mysql
72a69066d2fe: Pull complete #分层下载,docker image的核心,联合文件系统
93619dbc5b36: Pull complete
99da31dd6142: Pull complete
626033c43d70: Pull complete
37d5d7efb64e: Pull complete
ac563158d721: Pull complete
d2ba16033dad: Pull complete
688ba7d5c01a: Pull complete
00e060b6d11d: Pull complete
1c04857f594f: Pull complete
4d7cfa90e6ea: Pull complete
e0431212d27d: Pull complete
Digest: sha256:e9027fe4d91c0153429607251656806cc784e914937271037f7738bd5b8e7709 #签名
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest #真实地址
#等价命令
docker pull mysql
docker pull docker.io/library/mysql:latest
#指定版本下载
[root@localhost ~]# docker pull mysql:5.7
5.7: Pulling from library/mysql
72a69066d2fe: Already exists
93619dbc5b36: Already exists
99da31dd6142: Already exists
626033c43d70: Already exists
37d5d7efb64e: Already exists
ac563158d721: Already exists
d2ba16033dad: Already exists
0ceb82207cd7: Pull complete
37f2405cae96: Pull complete
e2482e017e53: Pull complete
70deed891d42: Pull complete
Digest: sha256:f2ad209efe9c67104167fc609cca6973c8422939491c9345270175a300419f94
Status: Downloaded newer image for mysql:5.7
docker.io/library/mysql:5.7
docker rmi -f 镜像名/镜像id 删除镜像
[root@localhost ~]# docker rmi -f 镜像id #删除指定的镜像
[root@localhost ~]# docker rmi -f 镜像id 镜像id 镜像id #删除多个镜像
[root@localhost ~]# docker rmi -f $(docker images -aq) #删除全部的容器
容器命令
docker run [可选参数] image
--name="Name" 容器名字 tomcat01 tomcat02,用来区分容i去
-d 后台方式运行
-it 使用交互方式运行,进入容器查看内容
-p 指定容器的端口 -p 8080:8080
-p ip:主机端口:容器端口
-p 主机端口:容器端口(常用)
-p 容器端口
-p 随机指定端口
#测试,启动并进入容器
[root@localhost ~]# docker run -it centos /bin/bash
[root@8bfe65458325 /]# ls #查看容器内的centos,基础版本,
bin dev etc home lib lib64 lost+found media mnt opt proc root run sbin srv sys tmp usr var
# 从容器中退回主机
[root@a84b2702bfe0 /]# exit
exit
[root@localhost /]# ls
bin dev home lib64 mnt proc run srv tmp var
boot etc lib media opt root sbin sys usr
docker ps 列出当前正在运行的容器
-a #列出当前正在运行的容器+历史运行过的容器
-n=? #显示最近创建的容器
-q #只显示容器的编号
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
[root@localhost /]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a84b2702bfe0 centos "/bin/bash" 8 minutes ago Exited (0) 8 minutes ago great_elgamal
退出容器
容器停止并退出
exit
容器不停止退出
ctrl+p+q
删除容器
docker rm 容器id #删除指定的容器,不能删除正在运行的容器,如果要强制删除 rm -f
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 run -d centos
问题docker ps,发现centos停止了
常见的坑,docker容器使用后台运行,就必须要有一个前台进程,docker发现没有应用,就会自动停止
容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了
![](https://i-blog.csdnimg.cn/blog_migrate/103bfa3f21f22a8296b189a94af98def.png)
查看日志docker logs -tf -n 容器id
#自己编写一段shell脚本
[root@localhost bin]# docker run -d centos /bin/sh -c "while true;do echo kuangshen;sleep 1;done"
#docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d2913187b91 centos "/bin/sh -c 'while t…" 14 seconds ago Up 14 seconds eloquent_shamir
#显示日志
-tf #显示日志
--tail number #显示日志条数
[root@localhost bin]# docker logs -tf --tail 10 8d2913187b91
查看容器中进程信息 docker top 容器id
#命令docker top 容器id
[root@localhost /]# docker top 8d2913187b91
UID PID PPID C STIME TTY TIME CMD
root 32058 32037 0 01:14 ? 00:00:00 /bin/sh -c while true;do echo kuangshen;sleep 1;done
root 40447 32058 0 01:23 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /usr/bin/sleep 1
进入当前正在运行的容器
docker exec -it 容器id /bin/bash
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d2913187b91 centos "/bin/sh -c 'while t…" 30 minutes ago Up 30 minutes eloquent_shamir
[root@localhost /]# docker exec -it 8d2913187b91 /bin/bash
[root@8d2913187b91 /]# ls
bin etc lib lost+found mnt proc run srv tmp var
dev home lib64 media opt root sbin sys usr
[root@8d2913187b91 /]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 0 06:14 ? 00:00:00 /bin/sh -c while true;do echo test;sleep 1;don
root 1877 0 0 06:45 pts/0 00:00:00 /bin/bash
root 1922 1 0 06:46 ? 00:00:00 /usr/bin/coreutils --coreutils-prog-shebang=sleep /
root 1923 1877 0 06:46 pts/0 00:00:00 ps -ef
-i :表示让容器的输入保持打开,
-t:表示让docker分配一个伪终端
-c:免交互直接在容器内执行命令
docker exec -it 8d2913187b91 /bin/bash -c conf/docker.conf
使用 docker exec方式进入容器,前提是容器必须是开启状态
docker attach 容器id
[root@localhost /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
8d2913187b91 centos "/bin/sh -c 'while t…" 40 minutes ago Up 40 minutes eloquent_shamir
[root@localhost /]# docker attach 8d2913187b91
test
test
test
docker exec 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 进入容器正在执行的终端,不不会启动新的进程
从容器内拷贝文件到主机上
docker cp 容器id:容器内路径 目的主机路径
拷贝是一个手动过程,未来使用-v数据卷的技术,可以实现同步
![](https://i-blog.csdnimg.cn/blog_migrate/fb6d4b1984bc6b2a37ea2314c2fce7c9.png)
基本命令总结
docker version 显示docker的版本信息
docker info 显示docker的系统信息,包括镜像和容器的数量
docker images --help 帮助命令
docker images 查看所有本地主机的镜像
docker images -q 只显示镜像的id
docker search mysql 搜索mysql镜像
docker search mysql --filter=stars=3000 搜索点击率超过300的mysql镜像
docker pull mysql:5.7 下载镜像mysql5.7版本
docker rmi -f 镜像id 删除指定的镜像
docker rmi -f 镜像id 镜像id 镜像id 删除多个镜像
docker rmi -f $(docker images -aq) 删除全部的容器
docker run -it centos /bin/bash 使用交互方式启动并进入容器
docker run -d centos 后台运行容器
docker run -p 8080:8080 centos 启动时指定容器的端口
docker ps 当前正在运行的容器
docker ps -a 当前和历史运行的容器
docker ps -q 只显示容器的编号
docker ps -n 5 查看最后创建的五个容器
docker ps -l 查看最新创建的一个容器
docker exec -it 容器id /bin/bash 进入容器后开启一个新的终端,可以在里面操作(常用)
docker attach 容器id 进入容器正在执行的终端,不会启动新的进程
docker rm 容器id 删除指定不在运行的容器
docker rm -f 容器id 强制删除指定容器
docker ps -a $(docker ps -aq) 删除所有容器
docker ps -a -q|xargs docker rm 删除所有容器
docker start 容器id 启动容器
docker restart 容器id 重启容器
docker stop 容器id 停止当前正在运行的容器
docker kill 容器id 强制停止当前容器
docker logs -tf -n 10 容器id 查看容器的10条日志
docker top 容器id 查看容器中进程的信息
docker inspect 镜像id 查看镜像的元数据
docker cp 30a7b34f68e5:/shen/shen.txt /home 拷贝容器文件到主机
docker commit -m="提交的信息" -a "作者" 容器id 目标镜像名:[TAG]需要小写 提交镜像
基本命令流程图
![](https://i-blog.csdnimg.cn/blog_migrate/6858f0750a4edc2119178e67a0a4893e.png)
Docker 安装nginx
下载最新的nginx镜像
docker pull nginx
启动nginx映射到8080
docker run -d -p 8080:80 nginx
Docker 安装tomact
下载最新的tomcat
docker pull tomcat
启动
docker run -d -p 8111:8080 tomcat
提交自己的镜像
docker commit 提交容器成为一个新的副本
docker commit -m="提交的信息" -a "作者" 容器id 目标镜像名:[TAG]需要小写
[root@localhost ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ff6daa4e4cf tomcat "catalina.sh run" 14 minutes ago Up 14 minutes 0.0.0.0:8111->8080/tcp, :::8111->8080/tcp upbeat_herschel
0cf6f676bef7 nginx "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:8080->80/tcp, :::8080->80/tcp sad_cartwright
[root@localhost ~]# docker exec -it 6ff6daa4e4cf /bin/bash
root@6ff6daa4e4cf:/usr/local/tomcat# ls
BUILDING.txt LICENSE README.md RUNNING.txt conf logs temp webapps.dist
CONTRIBUTING.md NOTICE RELEASE-NOTES bin lib native-jni-lib webapps work
root@6ff6daa4e4cf:/usr/local/tomcat# cp -r webapps.dist/* webapps
root@6ff6daa4e4cf:/usr/local/tomcat# cd webapps
root@6ff6daa4e4cf:/usr/local/tomcat/webapps# ls
ROOT docs examples host-manager manager
root@6ff6daa4e4cf:/usr/local/tomcat/webapps# exit
[root@localhost ~]# docker commit -m="测试" -a"申" 6ff6daa4e4cf tomcattest
sha256:a3432d545d4039e9bb5a80ba8ad9b17ac41dca24d04c9de6d9c26c5802ac5bfb
[root@localhost ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
tomcattest latest a3432d545d40 11 seconds ago 684MB
nginx latest 605c77e624dd 12 months ago 141MB
tomcat 9.0 b8e65a4d736d 13 months ago 680MB
tomcat latest fb5657adc892 13 months ago 680MB
centos latest 5d0da3dc9764 16 months ago 231MB
![](https://i-blog.csdnimg.cn/blog_migrate/093279fb12c4c4a0109bb868be64dc85.png)