docker 官方地址 Docker Documentation | Docker Documentation
docker 默认工作路径 /var/lib/docker
docker安装
脚本安装
1
| curl -sSL https://get.daocloud.io/docker | sh
|
手动安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| #卸载老版本的docker sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine #设置yum仓库下载源 sudo yum-config-manager \ --add-repo \ http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo #安装docker sudo yum install docker-ce docker-ce-cli containerd.io
|
配置docker镜像加速
阿里云镜像加速地址: 容器镜像服务 (aliyun.com)
1 2 3 4 5 6 7 8
| sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json <<-'EOF' { "registry-mirrors": ["https://xxxxx.mirror.aliyuncs.com"] } EOF sudo systemctl daemon-reload sudo systemctl restart docker
|
配置docker开机启动
Docker镜像相关命令
查看本地镜像
寻找镜像
下载镜像
1
| docker pull 镜像名称:版本号(默认是latest)
|
可以通过 Docker Hub 查看镜像具体版本
删除镜像
1 2 3
| docker rmi 镜像id(镜像id可以通过docker images查看) #删除所有镜像 docker rmi `docker images -q`
|
Docker容器相关命令
镜像和容器就好比类和对象的关系,可以通过镜像创建多个容器,容器就是镜像的实例化对象
创建容器
1 2 3 4 5 6 7 8
| docker run -it --name=c1 centos:7 /bin/bash # -i 保持容器一直运行 # -t 给容器创建一个终端 # --name= 给容器创建id # centos:7 用什么镜像创建 # /bin/bash 进入容器 docker run -it --name=c2 centos:7 # -d 后台运行,不会立即进入容器内,容器内退出后也不会关闭
|
- -it 创建的容器一般被称为交互式容器
- -id 创建的容器一般被成为守护式容器
查看正在运行的容器
1 2
| docker ps -a # -a 查看所有容器,包括历史容器
|
进入容器
1
| docker exec -it c2 /bin/bash #进入容器,只能进入守护式容器
|
退出容器
关闭容器
1
| docker stop 容器名称(通过--name设置的名称)
|
启动容器
删除容器
1 2
| docker rm 容器名称或者容器id #不能够删除正在运行的容器 docker rm `docker ps -a` #删除所有容器
|
检查容器
容器的数据卷
- 数据卷是宿主机的一个目录或文件
- 当容器目录和数据卷绑定后,双方的修改会同步
- 一个数据卷可以被多个容器挂载
配置数据卷
1 2 3 4 5
| docker run -v 宿主机目录(文件):容器内目录(文件)
|
数据卷容器
1 2 3 4
| docker run -it --name=数据卷容器名称 -v /volume centos:7
docker run -it --name=容器名称 --volumes-from 数据卷容器名称 centos:7
|
应用部署
MySQL部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| cd /home/kuang mkdir mysql cd mysql
docker search mysql docker pull mysql:5.7
#mysql 端口3306 docker run -p 3306:3306 --name mysql \ -v /home/docker/mysql/log:/var/log/mysql \ -v /home/docker/mysql/data:/var/lib/mysql \ -v /home/docker/mysql/conf:/etc/mysql \ -e MYSQL_ROOT_PASSWORD=123456 \ --restart=always\ -d mysql:5.7
|
1 2 3 4 5 6 7 8 9
| docker run:在docker中启动一个容器实例 -d:该容器在后台运行 -p 3306:3306:容器与主机映射端口为,主机3306,容器3306 --name mysql:容器运行后的名称 -v /mysqldata/mysql/log:/var/log/mysql:将容器/var/log/mysql目录下的数据,备份到主机的 /mysqldata/mysql/log目录下 -v /mysqldata/mysql/data:/var/lib/mysql:将容器/var/lib/mysql目录下的数据,备份到主机的 /mysqldata/mysql/data目录下 -v /mysqldata/mysql/conf:/etc/mysql:将容器/etc/mysql目录下的数据,备份到主机的 mysqldata/mysql/conf目录下 -e MYSQL_ROOT_PASSWORD=root:设置当前mysql实例的密码为root mysql:5.7:需要运行的容器名称以及版本号
|
1 2 3 4 5 6 7 8 9 10 11 12
| #切换到上述命令配置的主机/mysqldata/mysql/conf目录下 cd /home/docker/mysql/conf #创建 my.cnf文件 touch my.cnf #使用vim命令对 my.cnf文件添加如下内容,在docker中安装的mysql默认字符集是latin1,需要改成utf8 [client] default_character_set=utf8 [mysqld] collation_server = utf8_general_ci character_set_server = utf8 #重启mysql容器实例,让刚才的配置文件生效 docker restart mysql
|
Tomcat部署
1 2 3 4 5 6 7 8 9 10 11 12 13
| cd /home/kuang mkdir tomcat cd tomcat
docker search tomcat docker pull tomcat
#tomcat端口8080 docker run -id\ -p 宿主机端口:容器端口\ --name=容器名称\ -v $PWD:/usr/local/tomcat/webapps\ tomcat:9
|
Nginx部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| cd /home/kuang mkdir Nginx cd Nginx mkdir conf cd conf touch nginx.conf cd ..
docker search Nginx docker pull Nginx
#Nginx端口80 docker run -id\ --name=容器名称\ -p 宿主机端口:容器端口\ -v $PWD/conf/nginx.conf:/etc/nginx/nginx.conf\ -v $PWD/logs:/var/log/nginx\ -v $PWD/html:/usr/share/nginx/html\ nginx:latest
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| <!--nginx.conf文件--> user nginx; worker_processes 1;
error_log /var/log/nginx/error.log warn; pid /var/run/nginx.pid
events { worker_connections 1024; }
http { include /etc/nginx/mime.types; default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/logs/nginx/access.log main;
sendfile on; #tcp_nopush on;
#keepalive_timeout 0; keepalive_timeout 65;
#gzip on;
server { listen 80; server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
include /etc/nginx/conf.d/*.conf
}
|
Redis部署
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| cd /home/kuang mkdir Redis cd Redis
docker search redis docker pull redis:latest
#首先在要映射的conf文件夹下创建redis.conf文件
#Redis端口6379 docker run \ -p 6379:6379\ --restart always\ -v /home/docker/redis/conf/redis.conf:/etc/redis/redis.conf\ -v /home/docker/redis/data:/data\ --name redis\ -d redis redis-server /etc/redis/redis.conf\ --appendonly yes #重接 开机自启动 docker run --restart=always
|
ElasticSearch
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
|
echo "http.host: 0.0.0.0">>/home/docker/es/config/elasticsearch.yml
docker run --name es\ -p 9200:9200 -p 9300:9300\ -e "discovery.type=single-node"\ -e ES_JAVA_OPTS="-Xms128m -Xmx512m"\ -v /home/docker/es/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml\ -v /home/docker/es/data:/usr/share/elasticsearch/data\ -v /home/docker/es/plugins:/usr/share/elasticsearch/plugins\ --restart=always\ -d elasticsearch:7.4.2 docker run --name kibana -e ELASTICSEARCH_HOSTS=http://192.168.80.3:9200 -p 5601:5601 --restart=always -d kibana:7.4.2
|
RabbitMQ
1 2 3 4
| docker run -d --name mq \ -p 5671:5671 -p 5672:5672 -p 4369:4369 \ -p 25672:25672 -p 15671:15671 -p 15672:15672 \ rabbitmq:management
|
Dockerfile
Docker镜像本质是一个分层文件系统
容器转为镜像
1 2 3 4 5 6 7 8
| #制作镜像 docker commit 容器id 镜像名称:版本号
#镜像不能传输,需要将镜像变成一个文件 docker save -o 压缩文件名称 镜像名称:版本号
#拿到镜像压缩文件后,将压缩文件还原成镜像 docker load -i 压缩文件名称
|
dockerfile
1 2 3 4
| FROM java:8 MAINTAINER kuang<zuoyenuandong@qq.com> ADD jar包名称 目标jar名称 CMD java -jar 目标jar名称
|
1
| docker build -f dockerfile文件名称 -t 镜像名称 . #最后有个参数.
|
dockerfile案例
自定义CentOS7镜像。要求
1 2 3 4 5 6 7
| FROM centos:7 MAINTAINER kuang<zuoyenuandong@qq.com>
RUN yum install -y vim WORKDIR /usr
cmd /bin/bash
|
1 2 3 4 5
| vim centos_dockerfile #
# docker build -f ./centos_dockerfile -t mycentos:1.0 .
|
docker compose
安装docker compose
1 2 3 4 5 6 7 8
| #下载二进制包(可以自己替换版本) curl -L https://get.daocloud.io/docker/compose/releases/download/v2.4.1/docker-compose-`uname -s`-`uname -m` > /usr/local/bin/docker-compose #将可执行权限应用于二进制文件 $ sudo chmod +x /usr/local/bin/docker-compose #创建软链 $ sudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose #测试是否安装成功 $ docker-compose --version
|
编写docker-compose.yml文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| version: '3' services: 应用名称: image: 镜像名称 ports: - 宿主机端口:容器端口 volumes: . - 宿主机目录(文件):容器内目录(文件) - 宿主机目录(文件):容器内目录(文件) links: - 其他应用名称 应用名称: image: 镜像名称 expose: 端口号
|
启动docker compose
私有仓库
创建私有仓库
1 2 3 4 5 6 7 8 9 10 11 12
| #拉取私有仓库镜像 docker pull registry #启动私有仓库容器 docker run -id --name=registry -p 5000:5000 registry #打开浏览器 输入地址http://私有仓库服务器ip:5000/v2/_catalog。看到{"repositories":[]}表示私有仓库搭建成功
#修改daemon.json,在文件中添加一个key,让docker信任私有仓库地址 vim /etc/docker/daemon.json #重启docker systemctl restart docker #重新开启服务 docker start registry
|
1
| {"insecure-registries":["私有仓库服务器ip:5000"]}
|
将镜像上传私有仓库
1 2 3 4
| #标记镜像为私有仓库镜像 docker tag centos:7 私有仓库服务器ip:5000/centos:7 #上传标记镜像 docker push 私有仓库服务器ip:5000/centos:7
|
拉去私有仓库镜像
1
| docker pull 私有仓库服务器ip:5000/centos:7
|