docker

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

你可能感兴趣的:(docker)