docker笔记

docker


docker search  搜索镜像
docker pull imagename   获取镜像
docker images  查看已获取镜像

docker ps | sed -n '2,$p' | awk '{print $1}' | xargs docker stop  停止所有正在运行的容器

docker ps -a| sed -n '2,$p' | awk '{print $1}' | xargs docker rm  删除所有容器

docker images | sed -n '2,$p' | awk '{print $3}' | xargs docker rmi 删除所有镜像

docker images --no-trunc   查看镜像详细信息

docker image inspect 镜像名:tag(镜像id)  查看某个镜像信息

docker image ls -q  只查看镜像id

docker image save 镜像名(或者镜像id) >/opt/image.tar.gz  导出镜像
docker image load -i /opt/image.tar.gz   导入镜像,可用于离线状态或网络差的情况下获得镜像

docker image tag 镜像id 新标签     修改镜像tag

docker image rm -f 镜像id    强制删除镜像

docker image rm -f `docker image ls -q`   删除所有镜像

docker container run -it --name="自定义容器名" 镜像id    启动容器并开启一个容器内终端并命名容器
docker container run -it --name="自定义容器名" --rm 镜像id ,关闭容器后自动删除,用于启动测试,交互类容器

docker run -d --name="nginx" 镜像id   启动守护式容器

docker run -d -p 8080:80 --name="自定义容器名" 镜像id   映射容器内80端口至宿主机8080端口
docker run -d -p 8080:80 --restart=always nginx    加上restart参数后容器随着docker重启自动重启

docker container ls -a -q  查看所有容器的id

docker container start -i 容器id    交互式启动容器,不加i则是后台启动

docker container stop 容器id   停止容器

docker container inspect 容器id  查看容器详细信息

docker container attach 容器名    连接正在运行的交互式容器中,但所有连接都是一个终端
docker container exec -it 容器id /bin/bash     以子进程方式登录,以这种方式连接容器使用exit退出不会影响容器正常运行


容器内按快捷键ctrl+p+q,退出容器并使其后台运行
端口映射:
   -p hostIp:hostPort:containerPort/protocol [-p...]   可以指定多个端口映射


docker container top 容器id   查看容器内进程

docker container [-f] logs 容器id    查看容器内服务日志,加参数-f可动态追踪查看日志

docker container cp 源文件 容器id:容器内路径   拷贝文件至容器内

volume实现宿主机和容器的数据共享
docker run -d --name="c1" -p 8080:80 -v 宿主机指定目录:容器内指定目录
可以有多个-v参数挂载多个数据卷

需要挂载多个目录时:使用数据卷容器


配置本地yum源:
创建新的repo文件,设置baseurl指向挂载光盘镜像的目录
创建用于挂载镜像的目录如:mkdir -p /var/ftp/centos7
挂载镜像:mount -o loop 镜像名.iso /var/ftp/centos7

镜像制作
docker commit 容器id/名字 name/os:v1   制作镜像

容器内服务自启动



dockerfile  // 文件名必须问dockerfile
# Centos7
FROM 镜像名:tag/镜像名@id   //第一行非注释行
RUN shell命令  // 创建容器时执行的命令
EXPOSE port  //对外暴露容器内端口
EXPOSE port
CMD ["命令","参数"]  // 使用镜像启动容器时运行的命令
COPY // 拷贝宿主机文件到容器中,需要和dockerfile文件同目录,如果拷贝目录,则只会拷贝目录下子文件和子目录
ADD // 功能类似COPY,但可以上传并解压gz,bzip2,tar文件,还可以上传一个url对应文件,但不会自动解压
VOLUME  //共享数据卷
ENTRYPOINT ["/bin/bash","/init.sh"]  // 在启动容器时,第一进程被手工输入的命令替换掉,防止秒起秒关
ENV   //设置环境变量



docker image build -t "容器名" dockerfile

构建过程中会生成临时镜像,并可以启动镜像进行调试


构建私有docker registry

docker run -d -p 5000:5000 --restart=always --name regisrty -v /opt/registry:/var/lib/registry registry

编辑修改/etc/docker/daemon.json文件,添加一行
"insecure-registries": ["registry服务器ip:端口"]
"live-restore":true      // 关闭docker daemon而不关闭容器

重启docker服务

docker push registry容器ip:端口/项目名/服务名:v1   必须以这种方式上传镜像,否则会报错
docker tag nginx:latest registry容器ip:端口/项目名/服务名:v1   更改tag


在其他机器上,同样需要修改/etc/docker/daemon.json,修改insecure-registries选项
docker pull 镜像服务器ip:端口/项目名/服务名:tag  


本地仓库加安全认证:
生成密码:yum install httpd-tools -y
mkdir /opt/registry-auth/ -p
htpasswd -Bbn username passsword > /opt/registry-auth/htpasswd
重新启动带有秘钥功能的registry容器
docker rm -f `docker ps -qa`
docker run -d -p 5000:5000 -v /opt/registry-auth/:/auth -v /opt/registry:/var/lib/registry --name=register-auth -e "REGISTRY_AUTH=htpasswd" -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Reaml" -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" registry

需要登录后才能进行镜像push操作


harbor图形化管理容器
安装docker-compose   pip3 install docker-compose
下载harbor-offline-installer解压并修改配置文件,执行install.sh
docker-compose 控制停止和启动,进入harbor安装目录:docker-compose stop / docker-compose start

新建项目,选择公开,拉取镜像可以不用用户名密码


docker push 镜像
docker login ip:port

项目中有镜像时无法直接删除项目


docker本地网络类型和跨主机网络类型
docker network ls  


要实现外部访问容器服务,需要暴露端口并配置端口转发规则


none:无网络模式
bridge:默认模式,相当于NAT
host: 公用宿主机Network NameSpace
container: 与其他容器公用Network Namespace


docker跨主机访问-macvlan实现
docker network create --driver macvlan --subnet=192.168.1.0/24 --gateway=192.168.1.1 -o parnet=eth- macvlan_1
ip link set eth0 promsic on (ubuntu或者其他版本需要)
docker run -it --network macvlan_1 centos:7 /bin/bash

to be continued...

posted on 2021-03-02 14:07  hostage-killer  阅读(48)  评论(0)    收藏  举报

导航