安装 Docker
Docker 分为 CE 和 EE 两大版本。
CE 即社区版 EE 即企业版。
一. 卸载旧版本Docker
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinx docker-engine
二.使用yum安装必要系统工具
yum update -y
yum makecache
yum install -y yum-utils device-mapper-persistent-data lvm2
- 添加软件源信息
阿里云源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
微软源
yum –config-manager –add-repo http://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
官方源
https://download.docker.com/linux/centos/docker-ce.repo
- 如果需要测试版本的 Docker CE 请使用以下命令:
yum-config-manager --enable docker-ce-test
安装 Docker CE
yum makecache fast //更新 yum 软件源缓存
如果你想安装特定 docker-ce 版本,先列出 repo 中可用版本,然后选择安装
yum list docker-ce --showduplicates | sort -r
yum install docker-ce //安装 Docker-ce或docker-ce-版本
安装方法二:
curl -fsSL get.docker.com -o get-docker.sh //使用脚本安装
sh get-docker.sh --mirror Aliyu
或 sh get-docker.sh --mirror AzureChinaCloud
启动docker
systemctl enable docker
systemctl start docker
————————————————————————————————————————————————————
Docker使用命令
命令介绍
服务管理
service docker start # 启动 docker 服务,守护进程
service docker stop # 停止 docker 服务
service docker status # 查看 docker 服务状态
chkconfig docker on # 设置为开机启动
管理命令:
container 管理容器
image 管理镜像
network 管理网络
容器管理
列出本机正在运行的容器
docker container ls
列出本机所有容器,包括终止运行的容器
docker container ls --all
docker start [containerID/Names] # 启动容器
docker stop [containerID/Names] # 停止容器
docker rm [containerID/Names] # 删除容器
docker logs [containerID/Names] # 查看日志
docker exec -it [containerID/Names] /bin/bash # 进入容器
从正在运行的 Docker 容器里面,将文件拷贝到本机,注意后面有个【点】拷贝到当前目录
docker container cp [containID]:[/path/to/file] .
docker run centos echo "hello world" # 在docker容器中运行hello world!
docker run centos yum install -y wget # 在docker容器中,安装wget软件
docker ps # 列出包括未运行的容器
docker ps -a # 查看所有容器(包括正在运行和已停止的)
docker logs my-nginx # 查看 my-nginx 容器日志
docker run -i -t centos /bin/bash # 启动一个容器
docker inspect centos # 检查运行中的镜像
docker commit 8bd centos # 保存对容器的修改
docker commit -m "n changed" my-nginx my-nginx-image # 使用已经存在的容器创建一个镜像
docker inspect -f {{.State.Pid}} 44fc0f0582d9 # 获取id为 44fc0f0582d9 的PID进程编号
下载指定版本容器镜像
docker pull gitlab/gitlab-ce:11.2.3-ce.0
# 容器服务管理
docker run -itd --name my-nginx2 nginx # 通过nginx镜像,【创建】容器名为 my-nginx2 的容器
docker start my-nginx --restart=always # 【启动策略】一个已经存在的容器启动添加策略
# no - 容器不重启
# on-failure - 容器推出状态非0时重启
# always - 始终重启
docker start my-nginx # 【启动】一个已经存在的容器
docker restart my-nginx # 【重启】容器
docker stop my-nginx # 【停止运行】一个容器
docker kill my-nginx # 【杀死】一个运行中的容器
docker rename my-nginx new-nginx # 【重命名】容器
docker rm new-nginx # 【删除】容器
命令:
attach 介入到一个正在运行的容器
build 根据 Dockerfile 构建一个镜像
commit 根据容器的更改创建一个新的镜像
cp 在本地文件系统与容器中复制 文件/文件夹
create 创建一个新容器
exec 在容器中执行一条命令
images 列出镜像
kill 杀死一个或多个正在运行的容器
logs 取得容器的日志
pause 暂停一个或多个容器的所有进程
ps 列出所有容器
pull 拉取一个镜像或仓库到 registry
push 推送一个镜像或仓库到 registry
rename 重新启动一个或多个容器
rm 删除一个或多个容器
rmi 删除一个或多个镜像
run 在一个新的容器中执行一条命令
search 在 Docker Hub 中搜索镜像
start 启动一个或多个已经停止运行的容器
stats 显示一个容器的实时资源占用
stop 为镜像创建一个新的标签
top 显示一个容器内的所有进程
unpause 恢复一个或多个容器内所有被暂停的进程
镜像管理
docker pull centos:latest # 从docker.io中下载centos镜像到本地
docker images # 查看已下载的镜像
docker rm image_id # 删除镜像,指定镜像id
删除所有镜像
none 默认为 docker.io
docker rmi $(docker images | grep none | awk ‘{print $3}’ | sort -r)
连接进行进入命令行模式,exit命令退出。
docker run -t -i nginx:latest /bin/bash
三. 通过容器创建镜像
方法二种:从已经创建的容器中更新镜像 2.Dockerfile 指令来创建一个新的镜像
- 从已经创建的容器中更新镜像,并且提交这个镜像
docker commit -m=“First Docker” -a=“wcjiang” a6b0a6cfdacf wcjiang/nginx:v1.2.1
-m 提交的描述信息
-a 指定镜像作者
a6b0a6cfdacf 记住这个是容器id,不是镜像id
wcjiang/nginx:v1.2.1 创建的目标镜像名
- 使用 Dockerfile 指令来创建一个新的镜像
touch Dockerfile .dockerignore
这三个文件忽略: .git node_modules npm-debug.log
安装node的 Dockerfile 文件内容:
FROM node:8.4 //该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
COPY . /app //将当前目录下的所有文件(除了 .dockerignore 排除的路径),都拷贝进入 image 文件的 /app 目录
WORKDIR /app //指定接下来的工作路径为/app
RUN npm install --registry=https://registry.npm.taobao.org // 运行 npm install 命令安装依赖
EXPOSE 3000 //将容器 3000 端口暴露出来, 允许外部连接这个端口
有了 Dockerfile 文件以后,就可以使用 docker image build 命令创建 image 文件了
docker image build -t koa-demo .
或者
docker image build -t koa-demo:0.0.1
四. 发布自己的镜像
docker tag wcjiang/nginx:v1.2.1 wcjiang/nginx-test:lastest //将镜像nginx,起个新的名字nginx-test
-
登录docker
docker login ip:端口(本机忽略) -
上传nginx-test镜像
docker push wcjiang/nginx-test:lastest
五. 常用命令操作
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum -y install docker-ce
要想去仓库拉去镜像要需要先登录
docker login 地址:端口
例如 : docker login https://harbor.jlbw8.com/
拉取镜像
docker pull harbor.jlbw8.com/bxvip-super/sadmin-web:latest //latest是目录下面的标签
docker run -d --restart=alway -v /home:/home -p 80:80 --name mynginx nginx:latest
docker ps
nsenter -n -t`docker inspect mynginx -f {{.State.Pid}}`
netstat -nulpt
exit
docker exec -it 容器名或者进程名 /bin/bash
docker start my-nginx # 【启动】一个已经存在的容器
docker restart my-nginx # 【重启】容器
docker stop my-nginx # 【停止运行】一个容器
docker kill my-nginx # 【杀死】一个运行中的容器
docker rename my-nginx new-nginx # 【重命名】容器
docker rm new-nginx # 【删除】容器
docker cp host_path containerID:container_path # 从主机复制到容器
docker cp containerID:container_path host_path # 从容器复制到主机
docker container rm a4cd9683f78b #删除一个处于终止状态的容器
run
运行一个容器
-d # 指定容器运行于前台还是后台,默认为false
-it #打开STDIN,用于控制台交互分配tty设备,该可以支持终端登录
–name=“” # 自定义容器名字,后续可以通过名字进行容器管理
-v, --volume=[] # 给容器挂载存储卷,挂载到容器的某个目录
-p --publish=[] # 指定容器暴露的端口
-w, --workdir=“” # 指定容器的工作目录
-e, --env=[] # 指定环境变量,容器中可以使用该环境变量
-h, --hostname=“” # 指定容器的主机名
–dns=[ ] # 指定容器的dns服务器
–env-file=[] # 指定环境变量文件,文件格式为每行一个环境变量
–expose=[] # 指定容器暴露的端口,即修改镜像的暴露端口
-e MYSQL_ROOT_PASSWORD=“123456” #设置mysql 初始密码为123456
–net=“bridge” # 容器网络设置:
# bridge 使用docker daemon指定的网桥
# host //容器使用主机的网络
# container:NAME_or_ID >//使用其他容器的网路,共享IP和PORT等网络资源
# none 容器使用自己的网络(类似–net=bridge),但是不进行配置
–restart=“always” # 指定容器停止后的重启策略:
# no:容器退出时不重启
# on-failure:容器故障退出(返回值非零)时重启
# always:容器退出时总是重启
docker run -d --restart=always -–privileged=true --name registry -p 5000:5000 -v /opt/data:/var/lib/ registry:2
docker run -d -p 3308:3306 --name mysql01 -e MYSQL_ROOT_PASSWORD="123456" --restart=always mysql:5.7
说明:
–restart=always 此模式容器会跟 docker daemon会随着docker服务的重启而自动恢复
-v /opt/data:/var/lib/ 主机的目录映射到容器的目录
–name myregistry 定义容器名
-p 5000:5000 端口映射,本地端口5000映射到容器端口5000 -P 是直接容器映射到主机,不用加端口
–-privileged=true 配置了-v /opt/data/registry:/var/lib/registry ,如果没有关闭安全模块selinux,容器将没有权限访问本地目录
-d 后台模式
-it 交互模式启动一个容器 例如 docker exec -it 775c7c9ee1e1 /bin/bash
使用docker镜像nginx:latest以后台模式启动一个容器,并将容器命名为mynginx。
docker run --name mynginx -d nginx:latest
使用镜像 nginx:latest,以后台模式启动一个容器,将容器的 80 端口映射到主机的 80 端口,主机的目录 /data 映射到容器的 /data。
docker run -p 80:80 -v /data:/data -d nginx:latest
绑定容器的 8080 端口,并将其映射到本地主机 127.0.0.1 的 80 端口上。
docker run -p 127.0.0.1:80:8080/tcp ubuntu bash
使用镜像nginx:latest以交互模式启动一个容器,在容器内执行/bin/bash命令
docker run -it nginx:latest /bin/bash
inspect
inspect命令可以分层级显示一个镜像或容器的信息
-
创建一个守护态的Docker容器
docker run -itd ubuntu:14.04 /bin/bash -
使用docker ps查看到该容器信息,接下来就使用docker attach进入该容器
docker ps
docker attach 44fc0f05822d9 // 不太适合于生产环境
nsenter
进入一个容器
要显示该容器第一个进行的PID可以使用如下方式
docker inspect -f{{.State.Pid}} d2b461863810
拿到该进程PID之后我们就可以使用nsenter命令访问该容器
nsenter --target 3326 --mount --uts --ipc --net --pid //3326是pid
nsenter -n -t3326 //这个命令也可以进入容器
nsenter -n -tdocker inspect mynginx -f {{.State.Pid}}
或者
docker exec -it 容器名或者进程名 /bin/bash
通过容器创建镜像
- 从已经创建的容器中更新镜像,并且提交这个镜像
- 使用 Dockerfile 指令来创建一个新的镜像
已存在的容器创建一个新的镜像
docker commit -m=“First Docker” -a=“wcjiang” a6b0a6cfdacf wcjiang/nginx:1.0.0
-m 提交的描述信息
-a 指定镜像作者
a6b0a6cfdacf 记住这个是容器id,不是镜像id
wcjiang/nginx:1.0.0 创建的目标镜像名
docker image 查看
通过Dockerfile创建镜像
-
首先创建项目根目录创建文件
touch Dockerfile .dockerignore -
vim .dockerignore
//下面代码表示,这三个路径要排除,不要打包进入 image 文件
.git
node_modules
npm-debug.log -
vim Dockerfile
FROM node:8.4 //FROM node:8.4:该 image 文件继承官方的 node image,冒号表示标签,这里标签是8.4,即8.4版本的 node
COPY . /app //将当前目录下的所有文件,拷贝进入 image 文件的 /app 目录
WORKDIR /app // 指定接下来的工作路径为/app
RUN npm install --registry=https://registry.npm.taobao.org // 在/app目录下,运行 npm install 命令安装依赖。
EXPOSE 3000 // 将容器 3000 端口暴露出来, 允许外部连接这个端口 -
使用 docker image build 命令创建 image 文件了
docker image build -t node . // -t 参数用来指定 image 文件的名字,后面还可以用冒号指定标签如果不指定,默认的标签就是 latest
或
docker image build -t node:1.0 . // 后面有个 . 表示 Dockerfile 文件所在的路径为当前路径
发布自己的镜像
1.登录docker
docker login 或者 docker login 仓库地址
docker tag redis:1.0.1 192.168.22.130/test/redis:1.0.1 //打包
上传镜像
docker push 192.168.22.130/test/redis:1.0.1
镜像中安装软件
apt-get update
apt-get install vim
例如:
#进入到centos7镜像系统
docker run -i -t centos:7 /bin/bash
yum update
yum install vim
Docker私有仓库搭建
通过官方提供的私有仓库镜像registry来搭建私有仓库也可以通过部署管理工具 Harbor 来部署 registry
registry
docker pull registry
docker run -d --restart=always -p5000:5000 registry:latest
http://192.168.22.131:5000/v2/ //访问返回 {} 表示成功
推送镜像到私有仓库
1.从官方仓库拉取一个镜像
docker pull nginx
docker tag nginx:latest 192.168.22.131:5000/mynginx //打包创建一个新标签
docker push 192.168.22.131:5000/mynginx //推送到私有仓库中