一、Docker
简介
官方文档:https://docs.docker.com/get-started/
Docker是一个开源的应用容器引擎;是一个轻量级容器技术;
Docker支持将软件编译成一个镜像;然后在镜像中各种软件做好配置,将镜像发布出去,其他使用者可以直接使用这个镜像;
运行中的这个镜像称为容器,容器启动是非常快速的。
核心概念
docker主机(Host):安装了Docker程序的机器(Docker直接安装在操作系统之上);
docker客户端(Client):连接docker主机进行操作;
docker仓库(Registry):用来保存各种打包好的软件镜像;
docker镜像(Images):软件打包好的镜像;放在docker仓库中;
docker容器(Container):镜像启动后的实例称为一个容器;容器是独立运行的一个或一组应用
使用Docker的步骤:
1)、安装Docker
2)、去Docker仓库找到这个软件对应的镜像;
3)、使用Docker运行这个镜像,这个镜像就会生成一个Docker容器;
4)、对容器的启动停止就是对软件的启动停止;
安装Docker
在Linux虚拟机上安装Docker
1、检查内核版本,必须是3.10及以上
uname -r
2、安装docker
yum install docker
3、输入y确认安装
4、启动 docker
systemctl start docker
5、查看 docket 版本
docker -v
6、开机启动 docker
systemctl enable docker
7、停止docker
systemctl stop docker
测试 Docker 运行
1、通过运行简单的Docker映像测试安装是否工作, hello-world:
# 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/
2、列出下载到您的机器上的hello-world镜像:
# docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
hello-world latest fce289e99eb9 6 months ago 1.84kB
3、列出hello-world容器(由镜像生成),该容器在显示其消息后退出。如果它还在运行,您就不需要—all选项:
# docker container ls --all
CONTAINER ID IMAGE COMMAND CREATED STATUS
54f4984ed6a8 hello-world "/hello" 20 seconds ago Exited (0) 19 seconds ago
配置阿里云镜像加速器
登录阿里云开发者平台
获取加速器地址,并配置
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://xx-your-xx.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
# 检查docker镜像是否配置成功
docker info
#倒数三四行
Registry Mirrors:
https://l3onhrwo.mirror.aliyuncs.com/ ---阿里云镜像
https://docker.mirrors.ustc.edu.cn/ ---中国科学技术大学镜像
#或者可以查看 /etc/docker 下的daemon.json文件
[root@localhost ~]# cat /etc/docker/daemon.json
{
"registry-mirrors": ["https://l3onhrwo.mirror.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"]
}
[root@localhost ~]#
Docker常用命令&操作
镜像操作
操作 | 命令 | 说明 |
---|---|---|
检索 | docker search 关键字 eg:docker search redis | 我们经常去docker hub上检索镜像的详细信息,如镜像的TAG。 |
拉取 | docker pull 镜像名:tag | :tag是可选的,tag表示标签,多为软件的版本,默认是latest |
列表 | docker images | 查看所有本地镜像 |
删除 | docker rmi image-id | 删除指定的本地镜像 |
docker无法删除掉镜像的解决方法
删除某镜像时提示:
Error: No such image: fce289e99eb9
进入/var/lib/docker/images/的相关目录,删除残留文件:
# cd `find /var/lib/docker -path '*/imagedb/*tent/sha256'`
# ll
总用量 20
-rw------- 1 root root 6668 8月 24 10:31 5a3221f0137beb960c34b9cf4455424b6210160fd618c5e79401a07d6e5a2ced
-rw------- 1 root root 6648 8月 24 10:51 f7302e4ab3a81ad2d8033bc0088e5c335e7f046870f76728286bfb3fb17b3221
-rw------- 1 root root 1510 8月 23 08:08 fce289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e
[root@iZbp1fld0iwc92hyabexg7Z sha256]# rm -f fce2*
参考:https://zhangguanzhang.github.io/2018/02/05/docker-image-can-t-rm/
容器操作
软件镜像(QQ安装程序)----运行镜像----产生一个容器(正在运行的软件,运行的QQ);
【此处以安装 rabbitmq 为例】步骤:
注:获取镜像的时候要获取management版本的,不要获取last版本的,management版本的才带有管理界面。
1、搜索镜像
# docker search rabbitmq:management
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
macintoshplus/rabbitmq-management Based on rabbitmq:management 5 [OK]
transmitsms/rabbitmq-sharded Fork of rabbitmq:management with sharded_exc… 0
xiaochunping/rabbitmq xiaochunping/rabbitmq:management 2018-06-30 0
2、拉取镜像
# docker pull rabbitmq:management
management: Pulling from library/rabbitmq
5b7339215d1d: Pull complete
14ca88e9f672: Pull complete
a31c3b1caad4: Pull complete
b054a26005b7: Pull complete
eef17c6cb6cf: Pull complete
1b1c29c0085b: Pull complete
f8dfa8d24f5a: Pull complete
eb8ab9a01cdc: Pull complete
ab779a040984: Pull complete
5662cbdafc1c: Pull complete
7f07e4815b29: Pull complete
b056c3deadc8: Pull complete
Digest: sha256:5d61d789788cc4ee4396b693f99b1763086d43fd2ee215ca6f2725784131d0f7
Status: Downloaded newer image for rabbitmq:management
3、运行镜像
# docker run -d --hostname my-rabbit --name rabbit -p 5672:5672 -p 15672:15672 rabbitmq:management
1aeb5bd4bb70a8cda409ef8ff911980705319c31407943eccd4e917687e4ba25
--d: 后台进程运行
--hostname:指定容器主机名称
--name:指定容器名称
--p:将mq端口号映射到本地
--p:15672:15672 http访问端口
--p:5672:5672 amqp访问端口
--i: 以交互模式运行容器,通常与 -t 同时使用
--t: 为容器重新分配一个伪输入终端,通常与 -i 同时使用
4、查看运行中的容器
# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
9820f1cd68d4 rabbitmq:management "docker-entrypoint.s…" 12 minutes ago Up 12 minutes 4369/tcp, 5671/tcp, 0.0.0.0:5672->5672/tcp, 15671/tcp, 25672/tcp, 0.0.0.0:15672->15672/tcp rabbit
5、 停止运行中的容器
# docker stop 容器的id
6、查看所有的容器
# docker ps -a
7、启动容器
# docker start 容器id
8、删除一个容器
# docker rm 容器id
更多命令参看
https://docs.docker.com/engine/reference/commandline/docker/
此时就可以登录RabbitMQ 的 WEB界面了,访问地址是[ip:15672]默认用户名和密码都是guest
注:此处是部署在阿里云上的,如果要访问15672端口,需要设置安全组,详情查看:添加安全组规则
如果是本地虚拟机运行的话,关闭防火墙:
#关闭防火墙设置开机不启动 [root@docker ~]# systemctl stop firewalld [root@docker ~]# systemctl disable firewalld
参考文章:[RabbitMQ系列(五)使用Docker部署RabbitMQ集群]
Docker 实例
Docker 安装 Nginx
1、搜索镜像
# docker search nginx
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
nginx Official build of Nginx. 11864 [OK]
jwilder/nginx-proxy Automated Nginx 1641 [OK]
richarvey/nginx-php-fpm Container running Nginx + 736 [OK]
2、拉取镜像
#docker pull nginx
Using default tag: latest
latest: Pulling from library/nginx
1ab2bdfe9778: Pull complete
a17e64cfe253: Pull complete
e1288088c7a8: Pull complete
Digest: sha256:53ddb41e46de3d63376579acf46f9a41a8d7de33645db47a486de9769201fec9
Status: Downloaded newer image for nginx:latest
docker.io/library/nginx:latest
3、查看镜像
#docker images nginx
REPOSITORY TAG IMAGE ID CREATED SIZE
nginx latest 5a3221f0137b 8 days ago 126MB
4、启动 Nginx 容器实例
#docker run --name tyron-nginx -p 8888:80 -d nginx
tyron-nginx 容器名称。
-d 设置容器在在后台一直运行。
-p 端口进行映射,将本地 8888 端口映射到容器内部的 80 端口。
4.1、配置代理启动
#docker run -d --name nginx -p 80:80 --net host
-v /docker/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
-v /docker/nginx/log:/var/log/nginx
-v /docker/nginx/html:/usr/share/nginx/html
-v /docker/nginx/conf.d/default.conf:/etc/nginx/conf.d/default.conf
nginx
--net host 告诉 Docker 不要将容器网络放到隔离的名字空间中,即不要容器化容器内的网络
参考:https://blog.51cto.com/13362895/2130375(docker之网络配置)
(1)第一个“-v”,是项目位置,把项目放到挂载到的目录下即可;
(2)第二个“-v”,是挂载的主配置文件"nginx.conf",注意"nginx.conf"文件内有一行"include /etc/nginx/conf.d/*.conf;",这个include指向了子配置文件的路径,此处注意include后所跟的路径一定不要出错。
(3)第三个“-v”,把docker内子配置文件的路径也挂载了出来,注意要与(2)中include指向路径一致
(4)重点强调一下,nginx.conf是挂载了一个文件(docker是不推荐这样用的),conf.d挂载的是一个目录
Docker 安装 Redis 5.0.5
1、搜索镜像
# docker search redis
NAME DESCRIPTION STARS OFFICIAL AUTOMATED
redis Redis is an open source 7247 [OK]
bitnami/redis Bitnami Redis Docker Image 125 [OK]
sameersbn/redis 77 [OK]
grokzen/redis-cluster Redis cluster 3.0, 3.2, 4.0 & 5.0 54
rediscommander/redis-commander Alpine image for redis-commander 30 [OK]
2、拉取镜像
# docker pull redis:5.0.5
5.0.5: Pulling from library/redis
1ab2bdfe9778: Already exists
966bc436cc8b: Pull complete
c1b01f4f76d9: Pull complete
8a9a85c968a2: Pull complete
8e4f9890211f: Pull complete
93e8c2071125: Pull complete
Digest: sha256:9755880356c4ced4ff7745bafe620f0b63dd17747caedba72504ef7bac882089
Status: Downloaded newer image for redis:5.0.5
docker.io/library/redis:5.0.5
3、查看镜像
# docker images redis
REPOSITORY TAG IMAGE ID CREATED SIZE
redis 5.0.5 f7302e4ab3a8 9 days ago 98.2MB
Docker 安装 halo
#docker run --name mynginx -d -p 80:80 --net host -v /etc/nginx/html:/usr/share/nginx/html -v /etc/nginx/conf/nginx.conf:/etc/nginx/nginx.conf -v /etc/nginx/conf.d:/etc/nginx/conf.d -v /etc/nginx/logs:/var/log/nginx nginx
参考:
本文由 tyron 创作,采用 知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名
最后编辑时间为: Nov 8,2019