Docker 安装(Centos7为例)
官方文档:https://docs.docker.com/engine/install/centos/
yum安装gcc相关环境
yum -y install gcc
yum -y install gcc-c++
卸载旧版本
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
#安装ce社区版, 社区版客户端, 容器
$ yum install docker-ce docker-ce-cli containerd.io
#启动docker
$ systemctl start docker
#测试docker是否安装成功!
$ docker run hello-world
阿里云镜像加速
.....略,可参考阿里云上镜像服务设置即可!
Docker常用命令
docker version #显示docker版本信息
docker info #显示docker详细信息
docker 命令 --help #帮助命令
官方帮助文档:https://docs.docker.com/engine/reference/commandline/docker/
镜像命令
列出镜像
docker images
#显示已下载的所有镜像
[root@Docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat 1.10 439abadd75ea About an hour ago 713MB
mysql 5.7 2fb283157d3c 4 days ago 449MB
hello-world latest d1165f221234 2 weeks ago 13.3kB
centos latest 300e315adb2f 3 months ago 209MB
#REPOSITORY 镜像仓库源
#TAG 镜像的标签
#IMAGE ID 镜像的ID
#CREATED 镜像创建时间
#SIZE 镜像的大小
拉取镜像
docker pull
#下载镜像 docker pull 镜像名[:TAG]
[root@Docker docker]# docker pull mysql
Using default tag: latest
latest: Pulling from library/mysql
6f28985ad184: Already exists
e7cd18945cf6: Already exists
ee91068b9313: Already exists
b4efa1a4f93b: Already exists
f220edfa5893: Already exists
74a27d3460f8: Already exists
2e11e23b7542: Already exists
fbce32c99761: Pull complete
08545fb3966f: Pull complete
5b9c076841dc: Pull complete
ef8b369352ae: Pull complete
ebd210f0917d: Pull complete
Digest: sha256:5d1d733f32c28d47061e9d5c2b1fb49b4628c4432901632a70019ec950eda491
Status: Downloaded newer image for mysql:latest
docker.io/library/mysql:latest
删除镜像
docker rmi
#docker rmi 删除镜像
[root@Docker docker]# docker rmi 镜像id #删除指定容器
[root@Docker docker]# docker rmi -f $(docker images -aq) #删除所有镜像
[root@Docker docker]# docker rmi 镜像id 镜像id 镜像id #删除多个镜像
#删除指定容器
[root@Docker docker]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
diytomcat 1.10 439abadd75ea 2 hours ago 713MB
mysql 5.7 2fb283157d3c 4 days ago 449MB
mysql latest 26d0ac143221 4 days ago 546MB
hello-world latest d1165f221234 2 weeks ago 13.3kB
centos latest 300e315adb2f 3 months ago 209MB
[root@Docker docker]# docker rmi 439abadd75ea
Untagged: diytomcat:1.10
Deleted: sha256:439abadd75eae2b0258185aa80a2ed17887fa50656dcc7ef55cc0d987d61ab8a
Deleted: sha256:f7d4b3f954779391f1ab59cc05c7cbb362c3639853d6d5c323840b13a80358d4
Deleted: sha256:a7fda47e150aa6c52c4f682bb5dac823b4c29a4b8ea9902364a93276f192ef8f
Deleted: sha256:a97a36377ce64f87963419f9500a63ef4e76930374aca8ab9ac26284b90ba608
Deleted: sha256:27446ac871797ca9cb2818300da9c7ad143ad44900d144a331c590bbb6ef04d7
Deleted: sha256:c99f106dfe0d32a23d068207da1a3a8e4044c4f9834941d52acbfd63ce0b01bc
Deleted: sha256:3ac8669969cda8c63711002f83406a67c88f6137f273651cab37a424b1ffcbb5
Deleted: sha256:31fe38b240803bc6e86f7964bb38abaed117912a4c0af0c1ea9a2789fd4c249f
Deleted: sha256:66111a94433c2aed70a484284bb81b03a3044c8b4543052f1c56aaa3c7d95f63
Deleted: sha256:4fdf88646c215348b419d3b0a72e806db2b71d253557ef17233d8c50ac868f31
Deleted: sha256:6f3abea69bd295f85eda8402ae786d3ebcab1ba217ea7d5e81229934e35700a6
Deleted: sha256:6233a0aa03c9049a1a0e81a651ad7d0e4b1de2de67ec293076b7e56e956d8f85
Deleted: sha256:964a5017df73a7560130ab19ca94cc0ae5f9ebc61ed884161f61b7cf06d15f32
Deleted: sha256:e6e21c7b0144568d32ed777f03d26c34fe7a21022a92070be48fe3d9e585d4ba
Deleted: sha256:56ef332d3976287728d7d3ea4a100e57ca2c453ef48fa8ff78da4df4c06eacf0
Deleted: sha256:c52ca2724af20549404df82c70f6c429bc8eb451ba265bad2c52d59c9ebc9c13
Deleted: sha256:a077f831425f8b52c80dbc60f2be0560b32d7ae29289b2b4faeeb7e341932161
Deleted: sha256:be33ca1667e70ef00f316b52f7504b85c76f1e392e819786dddb2bd3fa6e0c4a
Deleted: sha256:b9addcf4784e026c0efebdf0e6c540a264e15d100bd5aa84c2c8b66a8c9b0b4c
Deleted: sha256:f8fa71576bc755d57f0872dcdc9f562799a00dfc01e09806c0bd00c8a0900eb9
Deleted: sha256:bd6e1b22922f6778605a11cf3904ee5bb85773d356714f2440ace0d4c25f07a5
[root@Docker docker]#
提交镜像
#commit
#docker Hub的镜像基本是阉割版的,某些功能可能不全,所以需要制定自己的镜像
docker commit -a="作者" -m="描述信息" 容器id 新镜像名:TAG #新镜像名的TAG是必须要的
容器命令
说明:我们有了镜像才可以创建容器!
运行容器
docker run
docker run [可选参数] image
#参数说明:
--name="name" 容器名称
-d 后台运行
-it 交互方式运行,进入容器查看内容
-p 指定端口映射 -p 8081:8080 宿机端口:容器端口
-P 随机指定端口
#-d方式启动后自动退出到宿机
[root@Docker docker]# docker run -d --name centos01 -P centos
67027aa52a8f6bc0fc0aeecd2075da11182d7fcbc25028e0c399ecafab3c0c76
[root@Docker docker]#
#-it方式启动后自动进入到容器
[root@Docker docker]# docker run -it --name centos02 -P centos
[root@a1dc01db0458 /]#
进入容器
docker exec
#启动新窗口进入容器
[root@Docker docker]# docker exec -it 容器id /bin/bash
[root@a1dc01db0458 /]#
docker attach
#不启动新窗口进入容器
[root@Docker docker]# docker attach 容器id
[root@a1dc01db0458 /]#
列出容器
#列出正在运行的容器
-a #列出所有的容器,包含历史运行容器
-n=? #列出最近创建的容器
-q #只显示容器的编号
[root@Docker docker]# docker ps [可选参数]
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a1dc01db0458 centos "/bin/bash" 11 minutes ago Up 11 minutes centos02
退出容器
exit #容器停止并退出容器
Ctrl+p+q #容器不停止退出
[root@Docker docker]# docker exec -it 容器id /bin/bash
[root@a1dc01db0458 /]# exit
exit
[root@Docker docker]#
删除容器
[root@Docker docker]# docker rm 容器id #删除指定容器
[root@Docker docker]# docker rm -f $(docker ps -aq) #删除所有容器
启动和停止容器
docker start 容器id #启动容器
docker restart 容器id #重启容器
docker stop 容器id #停止正在运行的容器
docker kill 容器id #强制停止当前容器
后台启动问题
常见问题:docker容器使用后台启动运行,就必须需要有一个前台进程,docker发现没有应用,就会自动停止容器
例:nginx,容器启动后,发现自己没有提供服务,就会立刻停止,就是没有程序了。
其他命令
查看日志
docker logs -f -t --tail 10 容器id #查看最近10条的日志
查看容器中的进程信息
docker top 容器id #显示容器的进程信息
查看镜像元数据
docker inspect 容器id
数据拷贝
docker cp 容器id:/home/docker/test.java /home #将容器内的text.java 拷贝到宿机的home目录下
容器数据卷
方式一: 使用-v 直接挂载
docker run -it -v 宿机路径:容器内路径
docker run -it -v /home/docker:/home --name centos01 centos /bin/bash #将容器的home目录挂载到宿机的home/docker目录下
Dockerfile
Docker网络
Docker集群
Docker Compose
简介:
Compose是Docker官方的开源项目,需要安装!
Compose 是一个定义和运行多个容器应用的工具,Compose可以用YAML文件去配置应用的服务,使用命令从配置文件中启动服务!
Compose安装
curl -L "https://github.com/docker/compose/releases/download/1.28.6/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose #github 下载较慢,可以使用国内地址下载
curl -L https://get.daocloud.io/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose #国内Compose下载路径
chmod +x /usr/local/bin/docker-compose #compose默认没有执行权限,赋权动作
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #创建软链接,让任何目录可以使用docker-compose命令
官方使用实例
- Create a directory for the project:
$ mkdir composetest
$ cd composetest
- Create a file called
app.py
in your project directory and paste this in:
import time
import redis
from flask import Flask
app = Flask(__name__)
cache = redis.Redis(host='redis', port=6379)
def get_hit_count():
retries = 5
while True:
try:
return cache.incr('hits')
except redis.exceptions.ConnectionError as exc:
if retries == 0:
raise exc
retries -= 1
time.sleep(0.5)
@app.route('/')
def hello():
count = get_hit_count()
return 'Hello World! I have been seen {} times.\n'.format(count)
-
Create another file called
requirements.txt
in your project directory and paste this in:flask redis
Create a Dockerfile
FROM python:3.7-alpine
WORKDIR /code
ENV FLASK_APP=app.py
ENV FLASK_RUN_HOST=0.0.0.0
RUN apk add --no-cache gcc musl-dev linux-headers
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
EXPOSE 5000
COPY . .
CMD ["flask", "run"]
- Create a file called
docker-compose.yml
in your project directory and paste the following:
version: "3"
services:
web:
build: .
ports:
- "5000:5000"
redis:
image: "redis:alpine"
- start up your application by running
docker-compose up
docker-compose up
*出现如上错误,使用Docker-compose build 后再up
yaml规则
#3层
version:'' #版本
services: #服务
服务1:web
#服务配置
image
build
network
...
服务2:Redis
....
服务3:redis
...
#其他配置 网络/卷/全局规则
volumes:
network:
configs:
**Depends_on 表示服务的启动顺序**
Docker Swarm
未完待续。。。。。