1. 基本介绍
Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。
Docker 可以让开发者打包应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。
容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app), 更重要的是容器性能开销极低。
2. 安装
安装前先关闭selinix, 重启系统
vi /etc/selinux/config 修改 SELINUX=disabled
安装
yum install docker
启动
systemctl start docker
停止
systemctl stop docker
自启动
systemctl enable docker
3. 基本使用
(1)拉取镜像
docker pull name:tag
举例:
如:安装mysql
docker pull docker.io/mysql:5.7.27
docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27
(2)创建容器运行实例
docker run [镜像名]
-i 以交互模式运行容器
-t 为容器重新分配一个伪输入终端
-d 后台运行容器,并返回容器ID;
-p 端口映射 (外部端口:容器内部端口)
-e 环境变量
--restart 重启docker时是否自启动该容器
--privileged 给容器添加特权,可以访问宿主机的文件
--name 给容器取名
-v 挂载宿主机的文件夹或文件到容器的特定文件夹或文件
(3)查看docker正在运行的进程
docker ps
(4)查看所有已创建的docker容器
docker ps -a
(5)进入docker容器
docker exec -it [容器id] /bin/bash
添加配置文件
vim /root/mysql/conf/my.cnf
###
[mysqld]
default-time-zone = '+08:00'
###
(6)重启容器
docker restart [容器id]
(7)Docker WEB UI
tips: 可以使用web ui 进行 docker 容器可视化管理
docker pull docker.io/portainer/portainer
docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock --privileged=true --name prtainer-test portainer/portainer
4. 其它命令
(1)批量启动所有容器
docker start $(docker ps -a | awk '{ print $1}' | tail -n +2)
(2)批量停止所有
docker stop $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
(3)批量删除所有
docker rm $(docker ps -a | awk ‘{ print $1}’ | tail -n +2)
(4)停止正在运行的容器
docker kill $(docker ps -a -q)
(5)删除所有已经停止的容器
docker rm $(docker ps -a -q)
(6)删除所有镜像
docker rmi $(docker images -q)
(7)更新参数
如使重启docker时容器自动启动:
docker container update --restart=always [容器ID]
5.样例
(1)安装mysql
docker pull docker.io/mysql:5.7.27
docker run -itd -p 3306:3306 \
--restart=always \
--privileged=true \
-v /root/mysql/conf:/etc/mysql/conf.d \
-v /root/mysql/data:/var/lib/mysql \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7.27
(2)安装nginx
1. 安装
宿主机创建文件夹
mkdir /root/nginx
拉取镜像
docker pull nginx
运行nginx容器
docker run -d --name mynginx -it -p 80:80 \
--restart=always \
-v /root/nginx/html:/usr/share/nginx/html \
-v /root/nginx/conf:/etc/conf \
-v /root/nginx/logs:/var/log/nginx \
--privileged=true \
nginx
-
配置文件
/root/nginx/conf/nginx.conf
#user nobody; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
-
重启nginx服务
docker exec -i {容器ID} nginx -s reload
(3)安装RabbitMQ
docker run -d --hostname rabbit --name rabbit -e RABBITMQ_DEFAULT_USER=admin -e RABBITMQ_DEFAULT_PASS=admin -p 4369:4369 -p 15671:15671 -p 5671:5671 -p 25672:25672 -p 15672:15672 -p 5672:5672 rabbitmq:3.8.3-management
6.镜像操作
(1)保存容器到镜像
docker commit -a “作者” -m “容器描述” [容器ID] [保存的镜像名]:[TAG]
docker commit -a "yangjing" -m "mysql with vim" a404c6c174a2 my-mysql:5.7.27
(2)与宿主机相互复制文件
docker cp [宿主机文件路径] [容器ID]:[容器路径]
docker cp /root/abc.txt 96f7f14e99ab:/var/abc.txt
docker cp [容器ID]:[容器路径] [宿主机文件路径]
docker cp 96f7f14e99ab:/var/abc.txt /root/abc.txt
(3)将镜像保存到本地文件
docker save -o [本地文件路径] [镜像名]:[TAG]
docker save -o /root/my-mysql.tar my-mysql:5.7.27
(4)从本地镜像加载到docker
docker load < [文件名]
docker load < my-mysql.tar
7.Java构建docker镜像
(1)Dockerfile
① 基本java程序打包到容器运行
# 使用含有openjdk8的基础镜像
FROM openjdk:8
MAINTAINER jim
# 添加该文件到容器中
ADD file-test-0.0.1-SNAPSHOT.jar app.jar
# 向外部暴露端口
EXPOSE 81
# 启动时执行该命令
ENTRYPOINT ["java","-jar","/app.jar"]
(2)构建
docker build -t jim/file-test .
# 构建完成查看
docker images
(3) 运行
docker run -it -d -p 81:81 jim/file-test