docker安装
1 安装
1 添加yum源:
yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
2 安装
yum install docker-ce
3 查看docker版本
[root@szj ~]# docker -v Docker version 18.09.6, build 481bc77156
2 启动运行
1 启动docker
[root@szj ~]# service docker start
Redirecting to /bin/systemctl start docker.service
2 查看客户端和服务端
[root@szj ~]# docker version Client: Docker Engine - Community Version: 23.0.3 API version: 1.42 Go version: go1.19.7 Git commit: 3e7cbfd Built: Tue Apr 4 22:04:18 2023 OS/Arch: linux/amd64 Context: default Server: Docker Engine - Community Engine: Version: 23.0.3 API version: 1.42 (minimum version 1.12) Go version: go1.19.7 Git commit: 59118bf Built: Tue Apr 4 22:02:01 2023 OS/Arch: linux/amd64 Experimental: false containerd: Version: 1.6.20 GitCommit: 2806fc1057397dbaeefbea0e4e17bddfbd388f38 runc: Version: 1.1.5 GitCommit: v1.1.5-0-gf19387a docker-init: Version: 0.19.0 GitCommit: de40ad0
3 Docker官方镜像仓库:
https://hub.docker.com
4 常见的docker命令:
docker search java (相当于在hub.docker.com搜索)
[root@szj ~]# docker pull java:8 从镜像仓库下载镜像到本地仓库(类似于maven)
注意:有时候执行pull命令的时候由于连接不上外国的网站,出现如下报错
解决方式:修改/etc/docker/ daemon.json,添加网易或阿里加速镜像进行加速
{"registry-mirrors": ["http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn"]}
重启docker服务即可。
[root@szj ~]# docker images 查看本地仓库中的镜像
REPOSITORY TAG IMAGE ID CREATED SIZE java 8 d23bdf5b1b1b 2 years ago 643MB
5 运行一个容器
[root@szj ~]# docker run -d -p 91:80 nginx:1.14 (-d后台运行, -p端口)
866c6f775a057605d23ec6e4885b207d011f350a79b2083495cb4df85d9f0072
此时就运行了一个docker容器,浏览器访问http://192.168.3.12:91/会看到运行的nginx
6 查看运行态的容器
[root@szj ~]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES bc28853025be nginx:1.14 "nginx -g 'daemon of…" 3 minutes ago Up 2 minutes 0.0.0.0:91->80/tcp competent_cohen
7 查看容器详细信息
[root@szj ~]# docker inspect bc28853025be
使用docker的ip访问nginx
在宿主机访问:
[root@szj ~]# curl 172.17.0.2:80
8 进入docker镜像
[root@szj ~]# docker container exec -it bc28853025be /bin/bash
root@bc28853025be:/#
3 构建自己的镜像
1 创建Dockerfile文件
内容:
#FROM指令用于指定基础镜像
FROM nginx
#RUN指令用于构建镜像阶段执行命令
RUN echo '<h1>this is zhuge nginx</h1>' > /usr/share/nginx/html/index.html
2 构建镜像
[root@szj app]# docker build -t nginx:zhuge .
Sending build context to Docker daemon 2.048kB
Step 1/2 : FROM nginx
…
Successfully built 3143d00dc239
Successfully tagged nginx:zhuge
查看镜像,就会发现多了一个镜像文件
[root@szj app]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
Nginx zhuge 3143d00dc239 34 seconds ago 109MB
3 运行镜像
[root@szj app]# docker run -d -p 93:80 nginx:zhuge
3514537d3f912c73c0a2ced5780bb895794645d2d7d41f0faf56198fd2a94148
4 将微服务打包成镜像并运行
以之前做的spring cloud eureka为例说明一下
1 创建Dockerfile文件
#基于哪个镜像
FROM java:8
#复制文件到容器
ADD cloud-eureka-server-1.0-SNAPSHOT.jar /app.jar
#声明需要暴露的端口
EXPOSE 8761
#配置容器启动后执行的命令
ENTRYPOINT ["java","-jar","/app.jar"]
2 构建镜像
[root@szj microService]# docker build -t microservice-eureka-server:zhuge .
Sending build context to Docker daemon 39.67MB
Step 1/4 : FROM java:8
---> d23bdf5b1b1b
Step 2/4 : ADD cloud-eureka-server-1.0-SNAPSHOT.jar /app.jar
---> 8b70ea19297b
Step 3/4 : EXPOSE 8761
---> Running in 0d1efcc3fdb3
Removing intermediate container 0d1efcc3fdb3
---> c0a2c2501855
Step 4/4 : ENTRYPOINT ["java","-jar","/app.jar"]
---> Running in 2b898ad6750b
Removing intermediate container 2b898ad6750b
---> c5b142446c7c
Successfully built c5b142446c7c
Successfully tagged microservice-eureka-server:zhuge
3 查看镜像
[root@szj microService]# docker images
4 启动镜像
[root@szj microService]# docker run -p 8761:8761 microservice-eureka-server:zhuge
5 浏览器测试
5 常用命令
5.1 docker运维相关
1 启动容器
docker run -dp 3000:3000 getting-started docker run -dp 3000:3000 --mount type=volume,src=todo-db,target=/etc/todos getting-started //挂载volume,这里把todo-db挂载到容器中的/etc/todos/路径下
2 列出容器
docker ps
3 关闭一个运行中的容器
docker rm -f <id>
4 启动镜像时执行bash命令
docker run -d ubuntu bash -c "shuf -i 1-10000 -n 1 -o /data.txt && tail -f /dev/null"
这里启动一个ubuntu镜像并写一个随机数到/data.txt中,其中&&后面的命令用于保持容器运行。
5 创建volume
[root@localhost ~]# docker volume create todo-db todo-db [root@localhost ~]# docker volume ls DRIVER VOLUME NAME local todo-db
5.2 docker内部
1 执行内部命令
docker exec <container-id> cat /data.txt
2 进入容器内部
docker container exec -it aded3ed2b62c /bin/sh