curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
/etc/docker/daemon.json
中添加{"registry-mirrors":["https://reg-mirror.qiniu.com/"]}
并重启服务
sudo systemctl daemon-reload
sudo systemctl restart docker
启动与停止:
systemctl start docker
systemctl stop docker
systemctl restart docker
systemctl status docker
docker
:systemctl enable docker
镜像命令:
docker images
docker search 镜像名称
docker pull 镜像名称
docker rmi 镜像id
容器命令:
docker ps
docker ps -a
-i
表示运行容器-t
表示容器启动后会进入命令行--name
表示为创建的容器命名-v
表示目录映射关系-p
表示端口映射centos7
的镜像:docker pull centos:7
docker run -it --name=mycentos centos:7
docker run -di --name=mycentos2 centos:7
docker exec -it mycentos2 /bin/bash
/bin/bash
的作用是保证exit
时容器不会停止,因为docker
后台必须运行一个进程docker exec -it
?:可以,但是exit
就退不出来了,得ctrl + c
了docker stop/start mycentos/ID
docker cp a.txt mycentos:/usr/local/
-v
参数:docker run -di -v /usr/local/test:/usr/local/test --name=mycentos centos:7
就是将宿主的test
目录和容器的test
做映射--privileged=true
ip
:docker inspect mycentos
docker rm mycentos
docker pull centos/mysql-57-centos7
docker run -di --name=mysql5.7 -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root mysql
(-p
表示端口映射,宿主的3306对应容器的3306, -e
表示添加环境变量,设置远程登陆密码,容器登陆密码为空)docker exec -it mysql5.7 /bin/bash
mysql
:mysql -uroot -p
当然第二步可以不这样设置远程密码,用正常的方式:
create user 'root'@'%' identified with mysql_native_password by '123456';
grant all privileges on *.* to 'root'@'%' with grant option;
flush privileges;
docker pull tomcat
docker run -di --name=mytomcat -p 9000:8080 -v /usr/local/tomcat/webapps:/usr/local/tomcat/webapps tomcat
/usr/local/tomcat/webapps
下放war
包即可docker pull nginx
docker run -di --name=nginx -p 80:80 nginx
docker pull redis
docker run -di --name=redis -p 6379:6379 redis
docker pull rabbitmq
docker run -d --hostname my-rabbit --name rabbitmq -p 15672:15672 -p 5672:5672 rabbitmq
docker exec -it rabbitmq /bin/bash
web
插件打开:rabbitmq-plugins enable rabbitmq_management
Compose项目是Docker官方的开源项目,负责实现对Docker容器集群的快速编排。它是一个定义和运行多容器的docker应用工具。使用compose,你能通过YMAL
文件配置你自己的服务,然后通过一个命令,你能使用配置文件创建和运行所有的服务
Docker-Compose
将管理的容器分为三层:
Docker-Compose运行目录下的所有文件
,无特殊指定工程名为当前目录名)sudo curl -L "https://github.com/docker/compose/releases/download/1.24.1/docker-compose-$(uname -s)-$(uname -m)" -o /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
卸载只需要删除文件即可:rm /usr/local/bin/docker-compose
模板文件是使用Compose的核心,涉及的指令关键字也比较多,大部分指令与docker run
相关参数的含义都是类似的。默认的模板文件名称为docker-compose.yml
,格式为YAML
格式。
模板主要分为三部分:
services
服务:在它下面可以定义应用需要的一些服务,每个服务都有自己的名字、使用的镜像、挂载的数据卷、所属的网络、依赖哪些其他服务等等。volumes
:数据卷,挂载使用networks
:应用的网络例如同时启动tomcat
和mysql
以及redis
容器:
mkdir -p /usr/local/mycompose
cd /usr/local/mycompose
vim docker-compose.yml
version: '3'
services:
redis1:
image: redis
ports:
- "6379:6379"
container_name: "redis1"
networks:
- dev
mysql1:
image: centos/mysql-57-centos7
environment:
MYSQL_ROOT_PASSWORD: "root"
prots:
- "3306:3306"
container_name: "mysql1"
networks:
- dev
web1:
image: tomcat
ports:
- "9090:8080"
container_name: "web1"
networks:
- dev
- pro
networks:
dev:
driver: bridge
pro:
driver: bridge
启动:
cd /usr/local/mycompose
# 启动
docker-compose up
# 如果后台启动
docker-compose up -d
# 停止
docker-compose stop
这里不列举docker compose的命令和compose文件的命令
怎么样自己开发一个镜像呢?
用Dockerfile
Dockerfifile
其实就是一个文本文件,由一系列命令和参数构成,Docker可以读取Dockerfifile
文件并根据Dockerfifile
文件的描述来构建镜像。
Dockerfile
分为四部分:
常用命令:
命令 | 作用 |
---|---|
FORM image_name:tag | 定义了根据哪个基础镜像启动构建流程 |
MAINTAINER user_name | 声明镜像创建者 |
ENV key value | 设置环境变量 |
RUN command | 核心部分,命令 |
ADD source_dir/file dest_dir/file | 将宿主的文件内容复制到容器内,如果是压缩文件会自动解压 |
COPY source_dir/file dest_dir/file | 将宿主的文件内容复制到容器内 |
WORKDIR path_dir | 工作目录 |
具体操作:
vim Dockerfile
# 根据centos构建
FORM centos:7
# 创建者
MAINTAINER jerry
# 工作目录
WORKDIR /usr
# 执行命令,在centos容器中创建文件夹并复制宿主的jdk
RUN mkdir /usr/local/java
# ADD可以自动解压
ADD jdk-8u202-linux-x64.tar.gz /usr/local/java/
# 环境变量
ENV JAVA_HOME /usr/local/java/jdk1.8.0_202
ENV JRE_HOME $JAVA_HOME/jre
ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib:$CLASSPATH
ENV PATH $JAVA_HOME/bin:$PATH
docker build -t="jdk1.8" .
# 到此构建完毕
# 创建并启动容器
docker run -it --name=testjdk jdk1.8 /bin/bash
# 进入容器查看java
java -version
docker commit mycentos mycentos
docker save -o mycentos.tar mycentos
docker load -i mycentos.tar
docker run - di --name=mycentos -o 80:80 mycentos
# 1. 拉取私有仓库镜像
docker pull registry
# 2. 启动容器
docker run -di --name=registry -p 5000:5000 registry
# 访问 ip:5000/v2/_catalog
# 3. 使docker信任私有仓库地址
# 之前添加过镜像加速的文件
vim /etc/docker/daemon.json
{"insecure-registries":["ip:5000"]}
# 4. 重启docker
systemctl restart docker
# 5. 启动容器
docker start registry
# 标记镜像为私有仓库的
docker tag mycentos ip:5000/mycentos
# 重启(可以不用)
docker restart registry
# 上传
docker push ip:5000/mycentos
docker pull ip:5000/mycentos
docker info
可以查看信息
拉取其他服务器:
vim /usr/lib/systemd/system/docker.service
--add-registry=ip:5000 --insecure-registry=ip:5000 \
# 重启
systemctl daemon-reload
systemctl restart docker