docker、docker-compose常用命令
初学者使用的docker、docker-compose常用命令,日常练习,环境简单搭建。
一、docker
1.1、安装docker
1.1.1、yum安装
#安装docker的数据存储驱动包
yum install -y yum-utils device-mapper-persistent-data lvm2
#设置新的安装源、下载配置文件到本地
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
#修改配置文件中的docker-ce官网地址
sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo
yum -y install docker-ce
systemctl start docker
1.1.2、二进制安装
mkdir /data /etc/docker
wget https://download.docker.com/linux/static/stable/x86_64/docker-20.10.0.tgz
tar -zxvf docker-20.10.0.tgz -C /data
#二进制文件拷贝
cd /data/docker
cp * /usr/bin
docker.service 写入:
cat > docker.service << EOF
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
Requires=docker.socket
[Service]
Type=notify
ExecStart=/usr/bin/dockerd --graph /data/service/docker
ExecReload=/bin/kill -s HUP $MAINPID
TimeoutSec=0
RestartSec=2
Restart=always
StartLimitBurst=3
StartLimitInterval=60s
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TasksMax=infinity
Delegate=yes
KillMode=process
OOMScoreAdjust=-500
[Install]
WantedBy=multi-user.target
EOF
cp docker.service /usr/lib/systemd/system/
docker.socket写入:
cat > docker.socket << EOF
[Unit]
Description=Docker Socket for the API
[Socket]
ListenStream=/var/run/docker.sock
SocketMode=0660
SocketUser=root
SocketGroup=docker
[Install]
WantedBy=sockets.target
EOF
cp docker.socket /usr/lib/systemd/system/
daemon.json 写入:
cat > daemon.json << EOF
{
"log-opts": {
"max-size": "50m",
"max-file": "5"
}
}
EOF
cp daemon.json /etc/docker
1.1.3、启动docker:
systemctl start docker
systemctl enable docker
2.2、docker相关操作
2.2.1、运行
docker ps #查看当前正在运行的容器
docker ps -a #查看本机所有容器,可见容器的短ID
docker ps -a --no-trunc #查看容器长ID
docker ps -l #列出最新创建的容器
docker ps -q #列出所有容器id
#注:容器运行的最低标准是都容器中至少有一个前台进程
docker start/stop/restart ID|NAME #启动/关闭/重启当前现有docker
docker rm ID|NAME #删除容器
docker exec -it ID|NAME bash #进入容器
docker exec web ls #不进入容器在容器中执行ls命令
docker inspect web #获取容器/镜像的元数据
2.2.2、镜像管理
docker search nginx #查看镜像可用版本
docker pull nginx #拉取镜像
docker images #查看镜像列表 等同于docker image ls
docker rmi httpd #删除镜像,等同于docker image rm httpd
docker pull centos:centos7.6.1810 #下载镜像时指定版本
docker history centos-web #查看指定镜像的创建历史
docker save -o /mnt/httpd.img httpd:latest #导出镜像到文件
docker load -i /mnt/httpd.img #导入镜像
docker rm $(docker ps -a -q) #抓取docker中的短ID然后删除
2.2.3、dockerfile构建镜像
$ vi dockerfile #新建dockerfile文件,文件名必须叫dockerfile
from centos:7.6.1810 #第一条固定为from,指定基础镜像
run yum -y install httpd #---run 表示执行命令
add index.html /var/www/html/ #--- add 从宿主机复制文件到容器中指定路径,且add支持自动解包、本地wget下载后复制
注:网页要在docker的同一目录下与dockerfile在一起
#---与add类似的COPY语句,复制文件到目录,不支持自动解包、本地wget下载后复制
volume /var /mnt #--- 让容器中的/mnt目录,挂载使用宿主机 /var 所在的文件系统
EXPOSE 80 #---指定监听端口
cmd ["/usr/sbin/init"] #--- cmd指定最终镜像完成后,启动容器时自动执行的命令,手动docker run 容器时,若run命令后有-c 参数,替代cmd
entrypoint ["/usr/sbin/init"] #--- 启动容器时自动执行的命令,若run命令后有-c 参数,不会被替换
docker build -t centos-http . #--- 构建镜像 ,-t 指定镜像名 . 表示当前目录,即指定dockerfile所在目录
$ docker history #显示镜像的构建历史
$ 当出现 ADD failed: file not found in build context or excluded by .dockerignore: stat mnt/d1/f1: file does not exist 错误时 #将需要复制的文件放到当前跟dockerfile 同一目录
注: copy时也一样 需要将文件放到更dockerfile的同目录
二、docker-compose
2.1、docker-compose安装
#从github上下载docker-compose二进制文件安装
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#若是github访问太慢,可以用daocloud下载
sudo curl -L https://get.daocloud.io/docker/compose/releases/download/1.25.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
#添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
#查看版本
docker-compose --version
2.2、docker-compose命令
docker-compose up #命令聚合每个容器的输出,命令退出时,所有容器都将停止
docker-compose up -d #在后台启动容器并使它们保持运行
docker-compose logs -f #查看该容器的启动的日志打印(日志从头打印)
docker logs -f container_id #查看某一容器的启动的日志打印(日志从头打印)
docker logs -f --tail 数量 container_id #查看某一容器的启动的日志打印(查看
最后n条日志打印)
docker-compose stop #停止compose服务
docker-compose restart #重启compose服务
docker-compose kill #杀掉compose服务
docker-compose ps #查看compose服务状态
docker-compose rm #删除compose服务
docker-compose down #停止并删除容器、网络、卷、镜像
docker-compose config #检查配置
docker-compose config -q #检查配置,有问题才输出
2.3、docker-compose.yml详解
2.3.1、Compose配置文件结构
Docker Compose配置文件是一个用于定义服务、网络和数据卷的YAML文件。其中服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样,网络和数据卷的定义类似于docker network create和docker volume create。跟docker run一样,如果在Dockerfile中通过诸如CMD、EXPOSE、VOLUME和ENV这些指令指定了相关选项,那么在默认情况下,不需要在docker-compose.yml中再次指定它们。
2.3.2、服务配置
1、服务定义了该服务启动的每个容器的配置,就像将命令行参数传递给docker run一样。比如以下配置:
services:
redis:
image: redis:alpine
services下的redis是用户自定义的服务名称,redis下的image只是众多服务配置项中的其中一个,意思是指定镜像名称或id。下面就对服务的相关配置项进行一个总结。
2、command
覆盖容器启动后默认执行的命令。可以写成字符串形式。例如:
command: bundle exec thin -p 3000
3、container_name
指定自定义容器的名称,而不是使用默认名称。例如:
container_name: my-web-container
因为Docker容器的名称必须唯一,所以为一个服务指定了自定义容器名称后,该服务不能进行扩展。如果尝试为该服务扩容将会导致错误。
4、env_file
从文件中获取环境变量。可以是一个值或一个列表。例如:
env_file:
- ./common.env
- ./apps/web.env
- /opt/runtime_opts.env
5、environment
设置环境变量。可以使用数组或字典两种格式。任何布尔类型的值都必须用引号引起来,以便解析器将它们解释为字符串。值设置了键没设置值的环境变量可以在运行Compose的主机环境中解析它们的值,这对于使用密钥和特定于主机的值用处很大。例如:
environment:
RACK_ENV: development
SHOW: 'true'
SESSION_SECRET:
environment:
- RACK_ENV=development
- SHOW=true
- SESSION_SECRET
注意:这里所说的环境变量是针对宿主机的Compose而言的,如果在服务中指定了build配置项,那么这些变量并不会进入构建过程中,如果要定义构建时用的环境变量首选build的arg子选项。
6、expose
暴露指定端口,但不映射到宿主机,只被连接的服务访问。只能指定内部端口。例如
expose:
- "3000"
- "8000"
7、image
指定要从中启动容器的镜像。可以写仓库/标签(repository/tag)或镜像ID。示例如下:
image: redis
image: ubuntu:18.04
image: tutum/influxdb
image: example-registry.com:4000/postgresql
image: a4bc65fd
如果镜像不存在,Compose会自动拉取镜像,除非指定了build,这种情况下会使用指定选项构建镜像并给镜像打上指定标签。
8、networks
指定所加入的网络。需要在顶层networks配置项中引入具体的网络信息。例如:
services:
some-service:
networks:
- some-network
- other-network
networks:
some-network:
other-network:
9、volumes
指定所挂载的主机路径或数据卷名称。支持short和long两种格式的语法。可以将主机路径作为单个服务的一部分进行挂载,而无需在顶层volumes配置项中定义。但是如果想要在多个服务之间重用数据卷,需要在顶层volumes配置项中定义一个数据卷名称。
short语法使用通用的[SOURCE:]TARGET[:MODE]格式,SOURCE可以是主机路径或数据卷名称,TARGET为挂载数据卷的容器路径,MODE可以为ro只读模式或rw读写模式(默认)。可以在主机上挂载相对路径,该路径相对于正在使用的Compose配置文件的目录进行扩展,相对路径应始终以.或..开头。例如:
volumes:
#只指定一个路径,Docker会自动在创建一个数据卷(这个路径是容器内部的)
- /var/lib/mysql
#使用绝对路径挂载数据卷
- /opt/data:/var/lib/mysql
#使用基于Compose配置文件的相对路径作为数据卷挂载到容器
- ./cache:/tmp/cache
#使用基于root用户的相对路径作为数据卷挂载到容器
- ~/configs:/etc/configs/:ro
#使用已经存在命名的数据卷挂载到容器
- datavolume:/var/lib/mysql
三、私有仓库harbor
3.1、安装docker-compose
3.2、配置ssl证书
openssl genrsa -des3 -out server.key 2048
openssl rsa -in server.key -out server.key ---清除密钥密码
openssl req -new -key server.key -out server.csr
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
cp server.key server.key.org
chmodcd -R 777 /data/cert
3.3、配置harbor
vi harbor.cfg
hostname = harbor.xxhf.com ---改hostname
3.4、浏览器访问
配置静态解析文件,hosts文件中加入: 192.168.190.100 harbor.xxxx.com
访问 http://harbor.xxxx.com,登录账号 admin / Harbor12345
3.5、docker客户端测试
配置静态解析文件,hosts文件中加入: 192.168.190.100 harbor.xxxx.com
vi /etc/docker/daemon.json
{ ... , ---原内容后追加,需在后面加个 ,
"insecure-registries": ["harbor.xxxx.com"] ---添加信任域名
}
systemctl restart docker
docker start $(docker ps -a -q ) ---启动容器
docker login -u admin harbor.xxxx.com ---登录harbor
docker tag centos:7.6.1810 harbor.xxxx.com/library/centos:7.6.1810 ---镜像名格式: 主机名或ip/项目名/镜像名:版本
docker push harbor.xxxx.com/library/centos:7.6.1810 ---上传
docker pull harbor.xxxx.com/library/centos:7.6.1810 ---下载
docker logout harbor.xxxx.com
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/595856.html 如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!