docker学习笔记

https://yeasy.gitbooks.io/docker_practice/content/compose/

1. 安装docker

#Docker 要求 CentOS 系统的内核版本高于 3.10
uname -r  #查看你当前的内核版本

#卸载旧版本
 sudo yum remove docker  docker-common docker-selinux docker-engine

#安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
sudo yum install -y yum-utils device-mapper-persistent-data lvm2

#设置yum源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo


#查看所有仓库中所有docker版本,并选择特定版本安装
yum list docker-ce --showduplicates | sort -r


#安装docker
sudo yum install docker-ce  #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0

#启动并加入开机启动
sudo systemctl start docker
sudo systemctl enable docker

#验证安装是否成功
docker version



#重启docker
systemctl restart docker

systemctl daemon-reload

为用户添加权限

1、普通用户启动docker时遇到如下错误:

Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Post http://%2Fvar%2Frun%2Fdocker.sock/v1.26/build?
buildargs=%7B%7D&buildbinds=null&cachefrom=%5B%5D&cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&labels=%7B%7
D&memory=0&memswap=0&networkmode=default&rm=1&shmsize=0&t=192.168.1.202%2Flibrary%2Ficp-service-interface%3Av2&ulimits=null:dial unix /var/run/docker.sock: connect: 
permission denied

2、解决办法
2.1、添加docker用户组

groupadd docker 

2.2、把当前用户加入docker用户组

gpasswd -a ${USER} docker      #表示当前用户: $USER 改成要使用权限的用户

3、查看是否添加成功:

cat /etc/group | grep ^docker

4、重启docker

serivce docker restart

5、更新用户组

newgrp docker 

6、测试docker命令是否可以使用sudo正常使用

docker ps

2. 镜像

https://www.daocloud.io/mirror#accelerator-doc

https://www.cnblogs.com/yufeng218/p/8371751.html

首先进入daoCloud 官网,点击更多,下面会有“加速器” ,点击进去后,你会看到如下页面, 分别对应了3个系统的docker 镜像设置脚本,对应执行以下就可以了。

$ docker pull hub.c.163.com/library/node:latest
$ docker images

3. Docker镜像常用命令

# 搜索镜像
docker search [OPTIONS] TERM
docker search java


# 下载镜像
docker pull [OPTIONS] NAME[:TAG|@DIGEST]
docker pull java

# 列出镜像
docker images [OPTIONS] [REPOSITORY[:TAG]]

# 删除本地镜像
docker rmi [OPTIONS] IMAGE [IMAGE...]
docker rmi hello-world

docker rmi -f $(docker images)  # 删除所有镜像

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

# 保存镜像
docker save [OPTIONS] IMAGE [IMAGE...]
docker save busybox > busybox.tar
docker save --output busybox.tar busybox

#加载镜像
docker load [OPTIONS]
docker load < busybox.tar.gz
docker load --input fedora.tar

docker build

https://www.jianshu.com/p/0f7b18aa7941
Dockerfile指令详解
https://www.imooc.com/article/39725
https://www.imooc.com/article/282348
https://www.imooc.com/article/25620

使用dockerfile构建镜像

# 构建镜像
docker build [OPTIONS] PATH | URL | -

docker build -t nginx:v1 .



4. 容器常用命令

docker run


# 新建并启动一个容器
① -d选项:表示后台运行

② -P选项:随机端口映射

③ -p选项:指定端口映射,有以下四种格式。

ip:hostPort:containerPort

ip::containerPort

hostPort:containerPort

containerPort

④ –network选项:指定网络模式,该选项有以下可选参数:

–network=bridge: 默认选项,表示连接到默认的网桥。

–network=host:容器使用宿主机的网络。

–network=container:NAME_or_ID:告诉Docker让新建的容器使用已有容器的网络配置。

–network=none:不配置该容器的网络,用户可自定义网络配置。


docker run java /bin/echo 'Hello World'

docker run -d -p 91:80 nginx   # -p 宿主机端口:容器端口         # 开放容器端口到宿主机端口     http://Docker宿主机IP:91/

docker run  --name docker_nginx_v1   -d -p 80:80 nginx:v1

容器常用命令

docker ps -a  #查看全部容器
docker ps -l

#查看日志
docker logs -f nexus

docker exec -it 480f45d /bin/bash
docker cp hello-world.war 117b230feabb:/docker_home/local/tomcat7/webapps
docker cp 文件路径  容器ID/NAME:容器路径


# 列出运行中的容器
docker ps
|Name|shorthand|Default|Description|
|--all| -a|	false|	列出所有容器,包括未运行的容器,默认只展示运行的容器|
|--filter| -f	|	|根据条件过滤显示内容|
|--format	|	|通过Go语言模板文件展示镜像|
|--last|-n	|-1	|显示最近创建n个容器(包含所有状态)|
|--latest| -l	 | false|	显示最近创建的容器(包含所有状态)|
|--no-trunc|	|false	|不截断输出|
|--quiet| -q| false	|静默模式,只展示容器的编号|
|--size| -s|	false|	显示总文件大小|


# 停止容器
docker stop [OPTIONS] CONTAINER [CONTAINER...]
docker stop 784fd3b294d7




# 强制停止容器
docker kill [OPTIONS] CONTAINER [CONTAINER...]
docker kill 784fd3b294d7



# 启动已停止的容器
docker start [OPTIONS] CONTAINER [CONTAINER...]
docker start 784fd3b294d7



# 重启容器
docker restart [OPTIONS] CONTAINER [CONTAINER...]


# 进入容器

docker attach 784fd3b294d7


# 删除容器
docker rm [OPTIONS] CONTAINER [CONTAINER...]
docker rm 784fd3b294d7
Name, shorthand	Default	Description
--force, -f	false	通过SIGKILL信号强制删除正在运行中的容器
--link, -l	false	删除容器间的网络连接
--volumes, -v	false	删除与容器关联的卷



# 进入容器
docker exec -it 容器id /bin/bash




#创建数据卷
docker run --name nginx-data -v /mydir 容器id

# 查看容器构造的详情
docker inspect 容器ID

#删除数据卷
docker rm -v 容器ID

#挂载宿主机目录作为数据卷
docker run --namename-volume -v /host-dir:/container-dir 容器ID
#挂载的权限是读写权限。也可使用:ro 参数指定只读权限
docker run --name name-volume -v /host-dir:/container-dir:ro 容器ID

#创建数据卷容器
docker run --name name-volume -v /data 容器ID
docker volume create  name-volume

#在其他容器中使用-volumes-from 来挂载 name-volume容器中的数据卷
docker run --name v1 --volumes-from name-volume 容器ID

https://blog.csdn.net/Kiloveyousmile/article/details/79830810
https://blog.csdn.net/henni_719/article/details/89376111

docker network create
docker network connect
docker network ls
docker network rm
docker network disconnect
docker network inspect

docker network create simple-network  #桥接网络
docker network inspect simple-network

docker network create -d bridge --subnet 172.25.0.0/16 simple-network

#指定网络及ip
 docker run --network=simple-network --ip=172.25.3.3 -itd --name=container3 imagename

创建一个容器,名为container5 ,并使用别名c4将其链接到container4       --network-alias app 给网络设置别名app    
docker run --network=simple-network -itd --name=container5 --link container4:c4   --network-alias app    imagename

#overlay 网络
docker network create -d overlay \
  --subnet=192.168.0.0/16 \
  --subnet=192.170.0.0/16 \
  --gateway=192.168.0.100 \
  --gateway=192.170.0.100 \
  --ip-range=192.168.1.0/24 \
  --aux-address="my-router=192.168.1.5" --aux-address="my-switch=192.168.1.6" \
  --aux-address="my-printer=192.170.1.5" --aux-address="my-nas=192.170.1.6" \
  my-multihost-network




docker network create -d bridge --subnet 172.25.0.0/16 my-network
#将指定容器连接到网络
docker network connect my-network container_name

docker network disconnect my-network container_name

docker network rm my-network


https://blog.csdn.net/qq_36119192/article/details/84404155
https://www.jianshu.com/p/145735b51dc5
https://blog.51cto.com/zhihao280/163849

搭建Docker Registry 2.0

#  搭建一个docker私有库服务   --restart=alwarys 标识当docker daemon启动的时候一起启动
docker run -d -p 5000:5000 --restart=always --name registry2 registry:2


# 修改镜像标签  将镜像推送到私有仓库
docker tag itmuch/microservice-discovery-eureka:0.0.1 localhost:5000/itmuch/microservice-discovery-eureka:0.0.1


docker push localhost:5000/itmuch/microservice-discovery-eureka:0.0.1

# 将镜像打了一个标签,相当于重命名一样,让名称尽可能规范
docker tag java:example chicu/java:example

docker push chicu/java:example

推送镜像到私服

# 将镜像推送到私服仓库中,需要修改镜像标签
docker tag java:my localhost:5000/java:my

docker push localhost:5000/java:my


# 获取私有仓库镜像
docker pull localhost:5000/java:my



# 查看私服镜像所有仓库
curl http://localhost:5000/v2/_catalog


# 查看仓库中镜像的所有标签列表
curl http://localhost:5000/v2/java/tags/list


Nexus管理Docker镜像

nexus 3搭建Docker私有仓库
使用Nexus管理Docker镜像

Docker的配置文件 daemon.json 详解
修改后只要reconfigure(systemctl reload docker) 就生效

    {
      "registry-mirrors": ["http://harbor.test.com"], #镜像加速地址
      "insecure-registries": ["harbor.test.com","registry.cn-shenzhen.aliyuncs.com"], # Docker如果需要从非SSL源管理镜像,这里加上。
      "max-concurrent-downloads": 10
    }


# 登录私有仓库  push上传之前必须要先登录 
docker login 192.168.1.101:8082

# 上传镜像之前需要先打一个tag,用于版本标记
docker tag <imageId or imageName> <nexus-hostname>:<repository-port>/<image>:<tag> 
docker tag lusyoe-debian 192.168.1.2:8082/lusyoe-debian:latest

# 上传镜像
docker push 192.168.1.2:8082/lusyoe-debian:latest


# pull镜像
docker pull 192.168.1.2:8082/lusyoe-debian

# 搜索镜像
docker search 192.168.1.2:8082/lusyoe

docker管理界面

Portainer文档

shipyard


   docker run -d --privileged -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v /opt/portainer:/data portainer/portainer


$ docker volume create portainer_data   #会在/var/lib/docker/volumes/  路径下创建文件夹
$ docker run -d -p 9000:9000 --name portainer --restart always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

使用Maven插件构建Docker镜像

mvn clean package docker:build

# 推送镜像
mvn clean package -Dmaven.test.skip=true  docker:build -DpushImage

# 为同一个镜像指定两个标签
mvn clean package docker:build -DpushImageTags -DdockerImageTags=latest -DdockerImageTags=another-tag



Dockerfile

FROM java:8
VOLUME /tmp
ADD microservice-discovery-eureka-0.0.1-SNAPSHOT.jar app.jar
RUN bash -c 'touch /app.jar'
EXPOSE 9000
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]


http://itmuch.com/categories/Docker/page/2/

https://blog.csdn.net/u011781521/article/details/80468985
https://blog.csdn.net/u011781521/article/details/80466451

https://my.oschina.net/u/3489495/blog/1825335

docker-compose 运行 php+nginx+mysql+redis 环境
docker网络

posted @ 2018-09-17 16:33  antball  阅读(270)  评论(0编辑  收藏  举报