安装Docker CE社区版本
yum remove docker-common
cd /etc/yum.repos.d/
wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
docker version
docker info
Docker启动
systemctl enable docker #开机启动
systemctl restart docker #启动Docker
docker version #验证安装,查看版本
Docker仓库的配置
vim /etc/docker/daemon.json
{
"registry-mirrors": ["http://hub-mirror.c.163.com/"]
}
systemctl restart docker
简单使用
docker pull hub-mirror.c.163.com/library/centos:7 # 下载镜像
docker images # 查看本地镜像
docker tag hub-mirror.c.163.com/library/centos:7 centos:7 #重命名
docker save hub-mirror.c.163.com/library/centos:7 >/tmp/centos.tar #导出镜像
docker rmi centos:7 #删除镜像
docker load < /tmp/centos7.tar #镜像导入
docker run -it centos:7 /bin/bash # i表示交互式,t表示打开一个Shell窗口
docker ps #查看运行的容器。
docker ps -a #查看所有容器
docker inspect #查看容器详细信息,run起来后不会显示作者信息。
docker logs #查看容器日志
docker rm #删除容器,-f 强制删除容器
docker stop xxx # 停止容器
docker start xxx # 启动容器
启动一个后台的docker
如果没有永久运行的程序,终端一退出容器就会马上退出
容器永久运行的条件:需要有永久运行的程序,并且使用run -d后台启动容器
docker run -d centos:7 /bin/bash -c "while true;do echo ouge; sleep 5; done" # 启动后台容器
docker exec -it xxx /bin/bash # 进入后台容器
基于commit制作镜像
docker run -it centos /bin/bash # 进入容器
yum install net-tools -y # 安装软件
vi /usr/bin/ougerun # 编写脚本
while true;do
echo ouge
sleep 5
done
docker commit xx centos:ifconfig # 生成新的镜像,如果没有指定tag,默认使用latest
基于dockerfile制作镜像
- Dockerfile使用说明
FROM #基于哪个基础镜像
MAINTAINER #代表维护者信息
COPY #往镜像里添加文件
RUN #运行命令构建镜像
ENTRYPOINT #镜像启动时运行的命令,不可替换
CMD #镜像启动时运行的命令,可替换
- Dockerfile配置文件实战:/docker/yum163/Dockerfile
FROM centos:7
MAINTAINER ouge 361589194@qq.com
COPY CentOS-Base.repo /etc/yum.repos.d/ # CentOS-Base.repo文件要在本地
RUN yum -y install net-tools
docker build -t centos7:163 /docker/yum163/ # 制作
docker run -it centos7:163 /bin/bash # 测试是否制作成功
Dockerfile构建nginx镜像
- Nginx安装脚本/docker/nginx/install.sh
yum install -y wget tar gcc gcc-c++ make pcre pcre-devel zlib zlib-devel
cd /usr/local/src
wget 'http://nginx.org/download/nginx-1.14.2.tar.gz'
tar -zxf nginx-1.14.2.tar.gz
cd nginx-1.14.2
./configure --prefix=/usr/local/nginx && make && make install
\rm -rf /usr/local/src/*
- nginx启动方式
默认nginx以daemon的方式启动,无永久运行的程序,容器会马上退出:/usr/local/nginx/sbin/nginx
Nginx使用永久运行的方式:/usr/local/nginx/sbin/nginx -g “daemon off;”
Dockerfile文件/docker/nginx/Dockerfile
FROM centos7:163
COPY install.sh /tmp/install.sh
RUN sh /tmp/install.sh
COPY sjgrun /usr/bin/sjgrun
ENTRYPOINT ["sjgrun"]
- 编写启动脚本sjgrun,加执行权限
#!/bin/bash
/usr/local/nginx/sbin/nginx -g "daemon off;"
- 制作Nginx镜像
docker build -t ouge:nginx /docker/nginx/
docker inspect ouge:nginx
Dockerfile构建Redis镜像
- Redis安装脚本/docker/redis/install.sh
yum install -y wget gcc gcc-c++ make tar openssl openssl-devel cmake
cd /usr/local/src
wget 'http://download.redis.io/releases/redis-4.0.9.tar.gz'
tar -zxf redis-4.0.9.tar.gz
cd redis-4.0.9
make && make PREFIX=/usr/local/redis install
mkdir -pv /usr/local/redis/conf/
cp redis.conf /usr/local/redis/conf/
\rm -rf /usr/local/src/*
- Redis镜像制作配置文件/docker/redis/Dockerfile
FROM centos7:163
COPY install.sh /tmp/install.sh
RUN sh /tmp/install.sh
COPY sjgrun /usr/bin/sjgrun
CMD ["sjgrun"]
- 编写启动脚本/docker/redis/sjgrun,加执行权限
#!/bin/bash
/usr/local/redis/bin/redis-server /usr/local/redis/conf/redis.conf
- 构建Redis镜像
docker build -t ouge:redis /docker/redis/
docker exec -it xxx /bin/bash
/usr/local/redis/bin/redis-cli
构建多个服务成一个镜像就在基础脚本上加就好了。
Docker网络模式
docker network ls # 查看网络方式
bridge模式 #让容器跟docker0网卡桥接,通过nat上网
host模式 #让容器和宿主机共享网络
none #关闭容器网络
yum install bridge-utils -y #网桥工具可以看具体的桥接
brctl show
- 桥接docker0加端口映射可以实现跟外界通讯
docker run -d -p 8080:80 ouge:nginx
docker run -d -p 172.16.7.211:8080:80 ouge:nginx
docker run -d -p 8080:80 -p 6381:6379 ouge:web #多端口映射
- 使用host模式,直接使用宿主机的网络,可直接外界通讯
docker run --net=host -d ouge:web # 直接就能外网通讯
运行ifconfig查看网卡信息
- 使用none模式,关闭容器网络,用得比较少
docker run --net=none -d ouge:web # 只有127.0.0.1网卡
Docker文件共享
mkdir -pv /ouge/logs /ouge/apps
docker run --net=host -d -v /ouge/logs:/usr/local/nginx/logs -v /ouge/apps:/usr/local/nginx/html/apps ouge:nginx
# -v 映射目录,删除容器时不会把映射的文件夹删除。
Docker特权指令
- 有时候要用到一些容器特殊的指令
route del default gw 172.17.0.1
SIOCDELRT: Operation not permitted
docker run --privileged=true -d ouge:nginx # --privileged=true开启特权
Docker-compose操作容器
- Docker-compose安装
curl -L "https://github.com/docker/compose/releases/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
docker-compose --version
- 配置文件
/docker/compose/redis/docker-compose.yml
version: '2'
services:
redis:
image: ouge:redis
- 操作命令
docker-compose up -d #后台启动容器
docker-compose ps #查看容器
docker-compose down #停止并删除容器
docker-compose stop; docker-compose start #停止启动容器
docker-compose exec xxx /bin/bash # 进入容器
#需要在配置文件所在的目录下执行命令!!
- 映射端口跟目录
version: '2'
services:
nginx:
image: ouge:nginx
ports:
- "8080:80"
- "9090:80"
volumes:
- /ouge/logs:/usr/local/nginx/logs
- compose同个镜像启动多个容器
docker-compose up -d --scale redis=3 # 启动三个
docker-compose exec --index=2 redis bash # --index 选择进入的容器
Harbor镜像仓库搭建
- 需要安装docker,docker-compose
tar xf harbor-offline-installer-v2.3.4.tgz
mv harbor /usr/local/
cd /usr/local/harbor
cp harbor.yml.tmpl harbor.yml
./install.sh
默认用户名admin,密码:Harbor12345
Harbor简单使用
- 配置http的协议访问仓库
{
"registry-mirrors": ["http://hub-mirror.c.163.com/","http://172.16.7.211/"],
"insecure-registries":["http://172.16.7.211"]
}
- 推送镜像
# Harbor上创建一个项目ouge
docker login 172.16.7.211 #需要先登录到Harbor
docker tag ouge:nginx 172.16.7.211/ouge/ouge:nginx # 打标签
docker push172.16.7.211/ouge/ouge:nginx # 推送
- 拉取镜像
docker pull 172.16.7.211/ouge/ouge:nginx # 拉取私有仓库需要登录