docker基本操作
01.安装docker
yum update #确保 yum 包更新到最新。
yum remove docker docker-common docker-selinux docker-engine # 卸载旧版本
yum install -y yum-utils device-mapper-persistent-data lvm2 #安装软件包工具
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #设置yum源
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum list docker-ce --showduplicates | sort -r #查看list
yum makecache fast
yum install docker-ce -y #安装
02.设置国内镜像
vim /etc/docker/daemon.json
{
"registry-mirrors": [
"https://fy707np5.mirror.aliyuncs.com",
"https://mirror.ccs.tencentyun.com",
"http://f1361db2.m.daocloud.io",
"https://3laho3y3.mirror.aliyuncs.com",
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
]
}
03.启动和设置开机自启动
systemctl daemon-reload
systemctl stop/status/ docker #启动docker
systemctl start docker #启动
systemctl enable docker #设置开机启动
chkconfig docker on #设置开机启动
docker version #验证版本
docker基本使用
01.拉取镜像
docker pull [ip:port] 仓库名[:标签]
02.启动容器
docker run -it --rm \
ubuntu:16.04 \
bash
-it #以交互式运行容器
--rm # 容器退出后随即删除容器
docker exec -it 容器id bash #以交互式进入容器
docker start 容器id或者容器名 #重新启动容器
docker run -it 容器id或者名称 /bin/bash #交互式启动容器
docker run -d 容器 /bin/bash #后台启动容器
03.列出镜像 查看启动过的容器
docker images [选项]
-a 所有
-f 过滤
--no-trunc=false id截断
-q 只显示id
docker image ls
docker ps -a
04.查看和删除虚悬镜像<仓库名和标签均为none>
docker image ls -f dangling=true #查看虚悬镜像
docker image prune #删除虚悬镜像,前提是停止容器运行
docker rmi `docker images -q` #删除全部镜像
docker rmi -f `docker images -q`
docker rmi -f $(docker images -q)
05.删除镜像/容器
-f #强制删除
docker image rm 镜像id
docker rmi 镜像id
docker rm 容器id
docker rm -f 容器id #强制删除
docker container prune #删除所有未运行的容器
06获取容器id
docker ps -aq ==docker ps -q #显示容器id
docker rm $(docker ps -aq ) #删除所有container
docker ps -f "status=exited" #列出退出的容器
docker ps -f "status=exited" -q #列出退出的容器的id -q是显示id
docker rm $(docker ps -f "status=exited" -aq) #删除退出的容器
07端口映射
docker run -p 80:8080 tomcat #外界通过80端口访问容器的8080端口
08docker完整运行
#安装rabbitmq:
docker run -d --restart unless-stopped --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq:management
#安装rancher
docker run -d --restart=unless-stopped -p 8080:8080 rancher/server:stable
#安装和运行redis
docker run -p 6379:6379 -d --name redis --restart unless-stopped redis redis-server --appendonly yes --requirepass "123456"
#AliSQL安装并且运行:密码123456
docker run -d --restart unless-stopped --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 registry.cn-hangzhou.aliyuncs.com/acs-sample/alisql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
#zoookeeper安装:
docker run -d --restart unless-stopped --name zookeeper -p 2181:2181 zookeeper
#Elasticsearch:
docker run -d --restart unless-stopped --name elasticsearch -p 9200:9200 -p 9300:9300 elasticsearch
#mongodb安装:
docker run -d --restart unless-stopped --name mongodb -v /data/mongodb0:/data/db -p 27017:27017 mongo --auth
docker exec -it mongodb /bin/bash
mongo use admin
#创建一个 admin 管理员账号
db.createUser({ user: 'admin', pwd: '123456', roles: [ { role: "root", db: "admin" } ] });
db.grantRolesToUser ( "root", [ { role: "userAdminAnyDatabase", db: "admin" } ] )
exit
#kafka安装:
docker run -d --restart unless-stopped --name kafka -p 9092:9092 --link zookeeper -e KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181 -e KAFKA_ADVERTISED_HOST_NAME=localhost -e KAFKA_ADVERTISED_PORT=9092 wurstmeister/kafka
#postgres安装:
docker run --name postgres -p 5432:5432 -d --restart unless-stopped postgres
create user log password 'log123';#创建用户log 密码是log123
drop user log;#删除log用户
#把jar包打包成docker,新建Dockerfile文件
FROM anapsix/alpine-java:latest
VOLUME /home/work/eureka
ADD eureka.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 8761
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
#编译命令行执行
docker build -t eureka .
docker run --name eureka -p 8761:8761 -d --restart unless-stopped eureka
docker run --name zuul -p 8080:8080 -d --restart unless-stopped zuul
docker run --name management -p 8088:8088 -d --restart unless-stopped management
#docker上多个java项目部署需要如下,否组不能注册到注册中心
docker run -d --name auth --expose=8081 -p 8081:8081 -e "EUREKA_INSTANCE_IP-ADDRESS=103.47.82.43" -e "SERVER_PORT=8081" auth
docker run -d --name management --expose=8088 -p 8088:8088 -e "EUREKA_INSTANCE_IP-ADDRESS=172.17.0.5" -e "SERVER_PORT=8088" management
docker run -d --name eureka --expose=8761 -p 8761:8761 -e "EUREKA_INSTANCE_IP-ADDRESS=103.47.82.43" -e "SERVER_PORT=8761" eureka
#查看docker中项目运行的日志
docker logs -f -t --tail 100 zuul
#删除zuul容器的shell
#!/bin/sh
contentName="zuul"
dockerId=$(docker ps -a | grep $contentName | awk '{print $1}')
echo "$contentName停止运行"
docker stop $dockerId
echo "删除$contentName"
docker rm $dockerId
echo "$contentName删除容器成功!"
#删除images
imagesId=$(docker images | grep $contentName | awk '{print $3}')
echo "删除$contentName的images"
docker rmi $imagesId
echo "删除$contentName成功!"
09数据共享(-v参数)
# -d 后台启动 -v后面的参数就是数据共享
#/usr/local/docker/tomcat/ROOT是服务器的路径
#/usr/local/tomcat/webapps/ROOT 是容器中的路径
docker run -p 8080:8080 --name tomcat -d \
-v /usr/local/docker/tomcat/ROOT: \
/usr/local/tomcat/webapps/ROOT tomcat
10查看日志
docker logs -tf mysql #查看mysql日志
-t 时间
11查看运行中的容器内的进程
docker top 容器名
12停止容器
docker stop 容器
docker kill 容器
13退出交互式容器
Ctrl+P Ctrl+Q
14查看端口映射
docker port 容器
15查看容器ip地址
docker inspect 容器
构建镜像
docker commit
docker commit [options]容器名 [repository]
options:
-a #author
-m #提交消息,和git中的一样
repository 仓库地址
docker build
Dockerfile
FROM 镜像 #指定镜像 必须有
RUN #每次run都会启动一个容器,build成功会删除
COPY <源路径(Dockerfile所在目录)> <目标路径(镜像中)>
ADD <文件、url路径等(最好是tar包)> <目标路径(镜像中)、工作目录> #add会自动解压tar包
#仅在tar包需要解压缩用ADD,其他都使用COPY
CMD 容器启动命令
ENTRYPOINT 入口点
ENV 设置环境变量
VOLUME 定义匿名卷
EXPOSE 暴露端口
WORKDIR 指定工作目录 #切换目录
报错:
1.Failed to Setup IP tables: Unable to enable SKIP DNAT rule: (iptables failed: iptables --wait -t nat -I DOCKER -i br-7110a72205d0 -j RETURN: iptables: No chain/target/match by that name.
(exit status 1))
重启docker :service docker restart