docker安装使用
一 Docker的安装过程
1、安装docker注意事项
- Linux要求内核3.0以上
- CentOS 需要是7版本的
- 既然有官方提示的注意,那么我们如何查看系统内核呢?查看命令如下:
[root@docker-1 ~]# uname -r 3.10.0-1160.el7.x86_64
2、卸载已经安装docker(注:卸载已经安装的docker,重新安装主要是确保整体的环境一致)
yum remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine
3、安装docker
- 安装yum工具包和存储驱动
yum install -y yum-utils
- 设置镜像仓库
#这是国外镜像docker仓库 yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo #国内阿里云docker镜像仓库 1、yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 2、yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
- 查看docker安装的版本有哪些
# 查看有哪些版本 yum list docker-ce --showduplicates | sort -r # 指定版本安装 yum -y install docker-ce-版本号 # 示例: yum -y install docker-ce-20.10.9-3.el7
- 安装docker
yum install docker-ce-19.03.* docker-ce-cli-19.03.* -y
- 启动docker和添加开机启动命令
systemctl start docker
- docker添加开机启动
systemctl enable docker
4、docker镜像加速设置
vim /etc/docker/daemon.json { "exec-opts": ["native.cgroupdriver=systemd"], "registry-mirrors": ["https://registry.docker-cn.com", "https://hub-mirror.c.163.com"], "insecure-registries": ["192.168.3.110:8080"], #添加这行内容,IP地址和端口修改成自己的 "graph":"/opt/docker", #降到安装到指定的命令 }
配置好镜像加速后重启docker
systemctl restart docker
5、docker指令
- info 指令查看系统信息
[root@docker-1 ~]# docker info Client: Context: default Debug Mode: false Plugins: app: Docker App (Docker Inc., v0.9.1-beta3) buildx: Docker Buildx (Docker Inc., v0.8.2-docker) scan: Docker Scan (Docker Inc., v0.17.0) Server: Containers: 1 Running: 0 Paused: 0 Stopped: 1 Images: 1 Server Version: 20.10.17 Storage Driver: overlay2 ''''等
- run
-i:交互模式
-t:分配一个终端
-d:后台运行
-p 绑定端口
--name:指定容器的名称
[root@docker-1 ~]# docker run --name myweb -it nginx /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh 10-listen-on-ipv6-by-default.sh: info: Getting the checksum of /etc/nginx/conf.d/default.conf 10-listen-on-ipv6-by-default.sh: info: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh /docker-entrypoint.sh: Launching /docker-entrypoint.d/30-tune-worker-processes.sh /docker-entrypoint.sh: Configuration complete; ready for start up 2022/07/29 11:05:24 [notice] 1#1: using the "epoll" event method
注:这个命令在前台运行,终端连接断开会结束该运行。或者是Ctrl+c结束
#绑定一个端口运行nginx [root@docker-1 ~]# docker run --name myweb -p 80:80 -itd nginx 5e1e8d9a30110ff9201b98e283b8fc81890649bf12536deab3e25a59e751b3ac #查看绑定端口 [root@docker-1 ~]# docker port myweb 80/tcp -> 0.0.0.0:80 80/tcp -> :::80
注:
-p 80:80 : -p 本地机器端口:容器端口
[root@docker-1 ~]# docker run --name myweb -itd nginx 79e421d5ae7ac2fdbf4790ae6d0d8bcf1aa989c0b68a61c07c68042740678f75
注:加上-d后台直接在后台运行,防止了连接终端断开后启动进行断开
- pull下载镜像(docker pull 下载镜像的名称)
docker pull hello-word
- search 查找镜像(docker search 需要查找的镜像名称)
docker search hello-word
- images查看本地镜像(docker images)
docker images
- ps查看容器进行(-a所有的:正在运行,已经停止)
#查看正常运行容器 docker ps #添加参数 -a 查看正常运行和停止状态 docker ps -a #根据状态status=exited查看已经停止的容器(获取的到的是停止容器ID号) docker ps -aq -f status=exited
- rm( -f 强制删除)删除容器
#删除容器名称,容器名称指的是--name 后面命名的名称,或者是docker ps -a 查看到的NAMES这列名称 docker rm myweb #删除容器id,这里的容器id指的是docker ps -a 查看到的CONTAINER ID这里下面的id docker rm 容器id
- start |stop|restart 对容器进行启动,关闭,重启
#启动容器 docker start myweb #启动所有停止的容器 docker start $(docker ps -aq -f status=exited) #关闭容器 docker stop myweb #重启容器 docker restart myweb
注:这里的myweb 容器名称就是在docker run 启动镜像的时候--name 设置的命名。或通过docker ps 或docker ps -a 查看NAMES 这列
- stats显示容器使用资源状态(docker stats 容器名称)
docker stats myweb
- logs( -f) 查看容器日志 docker logs -f 容器名称
docker logs myweb
注:直接把查看的容器日志全部显示出来
docker logs -f myweb
注:这里是实时刷新新的日志显示。使用中推荐添加 -f 使用
- pause(暂停容器)/unpause(取消暂停): docker pause 容器名称
#pause暂停命令 docker pause myweb #取消暂停命令 docker unpause myweb
注:运行此命令后可以使用docker ps 查看 STATUS 这列暂停的容器会添加括号(Paused)说明已经暂停
- rename重命名 docker rename 现在运行的容器名称 新的容器名称
[root@docker-1 ~]# docker rename myweb web [root@docker-1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 79e421d5ae7a nginx "/docker-entrypoint.…" 45 minutes ago Up 38 minutes 80/tcp web
注:原来运行的容器名称是myweb 重名为web,重名后可以利用docker ps 查看重名情况,查看NAMES这列
- kill关闭容器进程(docker kill 容器名称或者容器id)
#开启一个nginx镜像容器后台运行,命名为myweb [root@docker-1 ~]# docker run --name myweb -itd nginx 6a4c928dcddd01c548c860182d95e90a4b6caabb661ac6df5aa552259e7e6298 #结束myweb容器进行 [root@docker-1 ~]# docker kill myweb myweb #结束后查看运行状态 [root@docker-1 ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES [root@docker-1 ~]# docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 6a4c928dcddd nginx "/docker-entrypoint.…" 25 seconds ago Exited (137) 10 seconds ago myweb
- top查看容器进程(docker top 容器名称或容器id)
docker top myweb
根据容器进程pid进程查看(docker top 容器名称或容器id 容器进程pid)
docker top myweb 3258
- cp文件复制
把当前目录下面的test.txt文件复制到 myweb容器/opt目录下面 [root@docker-1 ~]# docker cp test.txt myweb:/opt #查看test.txt是否复制到了myweb:/opt目录下面 [root@docker-1 ~]# docker exec -it myweb ls -l /opt total 0 -rw-r--r--. 1 root root 0 Jul 29 12:50 test.txt #把复制到mywenb:/opt容器下面的test.txt文件复制到本地home目录下面 [root@docker-1 ~]# docker cp myweb:/opt/test.txt /home [root@docker-1 ~]# ls -l /home/ 总用量 0 -rw-r--r--. 1 root root 0 7月 29 20:50 test.txt
- diff容器文件系统发生的变化(doc diff 容器名称)
docker diff myweb
- login/logout登录/退出
# 用户登录 [root@docker-1 ~]# docker login Login with your Docker ID to push and pull images from Docker Hub. If you don't have a Docker ID, head over to https://hub.docker.com to create one. Username: 输入注册的docker用户 Password: 输入密码 WARNING! Your password will be stored unencrypted in /root/.docker/config.json. Configure a credential helper to remove this warning. See https://docs.docker.com/engine/reference/commandline/login/#credentials-store #出现Login Successded代表登录成功 Login Succeeded #用户退出登录 [root@docker-1 ~]# docker logout Removing login credentials for https://index.docker.io/v1/
- inspect命令显示容器的详细属性信息。这的的webserver指的是容器名称
docker inspect webserver
6、容器连接
- exec进入容器执行命令(docker exec -it 容器名称 bash)
[root@docker-1 ~]# docker exec -it myweb bash root@6a4c928dcddd:/# ls bin dev docker-entrypoint.sh home lib64 mnt proc run srv tmp var boot docker-entrypoint.d etc lib media opt root sbin sys usr
- port显示容器绑定端口信息(docker port 容器名称)
[root@docker-1 ~]# docker port myweb 80/tcp -> 0.0.0.0:80 80/tcp -> :::80
7、镜像的操作命令
- history查看镜像的更新操作
[root@docker-1 ~]# docker history nginx IMAGE CREATED CREATED BY SIZE COMMENT 670dcc86b69d 9 days ago /bin/sh -c #(nop) CMD ["nginx" "-g" "daemon… 0B <missing> 9 days ago /bin/sh -c #(nop) STOPSIGNAL SIGQUIT 0B <missing> 9 days ago /bin/sh -c #(nop) EXPOSE 80 0B <missing> 9 days ago /bin/sh -c #(nop) ENTRYPOINT ["/docker-entr… 0B <missing> 9 days ago /bin/sh -c #(nop) COPY file:09a214a3e07c919a… 4.61kB <missing> 9 days ago /bin/sh -c #(nop) COPY file:0fd5fca330dcd6a7… 1.04kB
- tag重命名
push上传镜像到镜像仓库 docker push 镜像名称(这里的镜像名称指的是利用docker images 查看到的REPOSITORY 这列下面的名称)
[root@docker-1 ~]# docker push 镜像名称
- rmi (-f强制删除,会删除关联的镜像)删除镜像 docker rmi 删除的镜像名称/或者镜像id
docker rmi 镜像名称
- commit将容器改变为镜像
[root@docker-1 ~]# docker commit -a "author" -m"nginx run" myweb web:v1 sha256:48b29ac6d23bf54f360b5132aee329c1f5041e92b84e9075bde08df1800e130d
注:
-a:制定的作者
-m:提交的信息
myweb 是容器名称。这里需要主要的是在使用docker commit 的时候需要先 把容器启动
web:v1 web指的是镜像名称,v1指的是tag(标签名称)。就是利用docker images查看的REPOSITORY和TAG列下面的名称
docker -commit -a "作者名称" -m"提交的信息" 容器名称 镜像名称:tag(标签)
- build构建新镜像
创建一个构建镜像Dockerfile文件 vim /opt/Dockerfile # 语法如下 FROM web:v1 [root@docker-1 ~]# docker build -t webserver -f /opt/Dockerfile . Sending build context to Docker daemon 20.53kB Step 1/1 : FROM web:v1 ---> 48b29ac6d23b Successfully built 48b29ac6d23b Successfully tagged webserver:latest
注:
1、FROM web:v1
web:指的是先有的镜像名称(docker images 查看的REPOSITORY这列下面的镜像名称)
v1:指的是标签名称(docker images 查看的TAG这列下面的标签名称)
docker build -t webserver -f /opt/Dockerfile .
注: docker build -t 创建新的镜像名称 -f Dockerfile所在路径 .
其中 . 需要添加的