docker安装和使用

 一:docker安装

docker官网安装文档:https://docs.docker.com/engine/install/centos/
1.yum安装: yum -y install docker 
  
2.rpm安装: 
https://download.docker.com/linux/centos/7/x86_64/stable/Packages/ 

找到最新的rpm包,然后:yum -y install docker-ce-20.10.19-3.el7.x86_64.rpm 

运行docker:systemctl start docker 
验证:docker run hello-world

3.二进制安装:
https://download.docker.com/linux/static/stable/x86_64/
找到最新包并且下载
解压:tar -zxvf docker-20.10.3.tgz
进入解压的目录中:cp docker/* /usr/bin/
运行docker:systemctl start docker 
验证:docker run hello-world

设置docker开机启动

vim /etc/systemd/system/docker.service
[Unit]
Description=Docker Application Container Engine
Documentation=https://docs.docker.com
After=network-online.target firewalld.service
Wants=network-online.target
[Service]
Type=notify
ExecStart=/usr/bin/dockerd
ExecReload=/bin/kill -s HUP $MAINPID
LimitNOFILE=infinity
LimitNPROC=infinity
LimitCORE=infinity
TimeoutStartSec=0
Delegate=yes
KillMode=process
Restart=on-failure
StartLimitBurst=3
StartLimitInterval=60s
[Install]
WantedBy=multi-user.target
加载配置:systemctl daemon-reload
加入自启动:systemctl enable docker.service
启动docker:systemctl start docker

注意:

 在连接镜像仓库的时候报错:

[root@localhost ~]#  sudo docker login --username=asula 172.11.11.11
Password: 
Error response from daemon: Get https://172.11.11.11/v1/users/: x509: certificate signed by unknown authority

 需要去掉开机自启中配置文件的这个配置:--insecure-registry=127.0.0.1

这个配置会影响你在配置文件/etc/docker/daemon.json中添加的insecure-registries参数,会导致这个参数不生效。

使用docker info查看Insecure Registries字段是否生效:

 如果第二个是你在/etc/docker/daemon.json中配置的地址,就说明生效反之则没有生效,图片中是没有生效的例子。

docker配置阿里云镜像加速:

地址:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
   "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]
 }
 EOF
{
  "registry-mirrors": ["https://xxxxxxxx.mirror.aliyuncs.com"]

sudo systemctl daemon-reload
sudo systemctl restart docker

二:docker的使用

1.docker启动nginx,将宿主机的8080映射到容器内nginx的80端口

拉取镜像:docker pull nginx 

启动镜像:docker run -d --name nginx_test1 -p8080:80 nginx
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   3 minutes ago       Up 3 minutes        0.0.0.0:8080->80/tcp   nginx_test
[root@localhost ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      75012/mysqld        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      47874/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1201/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1649/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      109047/zabbix_agent 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      109244/zabbix_serve 
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      120532/php-fpm: mas 
tcp6       0      0 :::8080                 :::*                    LISTEN      43178/docker-proxy- 
tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1649/master         
tcp6       0      0 :::10050                :::*                    LISTEN      109047/zabbix_agent 
tcp6       0      0 :::10051                :::*                    LISTEN      109244/zabbix_serve 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           842/chronyd         
udp6       0      0 ::1:323                 :::*                                842/chronyd     

 相关命令:

docker build 构建自己定义镜像:

[root@localhost app]# cat Dockerfile 
FROM 10.10.10.10/app/java:8
ARG JAR_FILE
#WORKDIR / 
ADD server.zip /
#COPY start.sh /
#RUN ["chmod", "+x", "start.sh"]
#ENTRYPOINT ["/start.sh"]
#ENV JAVA_DEST="-Dspring.profiles.active=app -Ddruid.mysql.usePingMethod=false"
RUN ["unzip","/app.zip"]
RUN ["chmod","+x","/server/start.sh"]
WORKDIR /server/
ENTRYPOINT ["/server/start.sh"]
#ENTRYPOINT java -Dfile.encoding=utf-8 -Xms4096m -Xmx8192m -Dspring.profiles.active=app -jar /app.jar

#Docker后端打包:
docker build -t 10.10.10.10/app/app:20231031 .
docker images
docker push 10.10.10.10/app/app:20231031

#K8s拉取镜像:
kubectl apply -f deployment.yaml
[root@localhost app]# cat deployment.yaml 
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app
  labels:
    app: app
spec:
  replicas: 1
  selector:
    matchLabels:
      app: app
  template:
    metadata:
      labels:
        app: app
    spec:
      containers:
      - name: app
        image: harbor.dcos.xxx.local/images/app:20231031
        imagePullPolicy: Always
1.查看正在运行的镜像(容器)
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   7 minutes ago       Up 7 minutes        0.0.0.0:8080->80/tcp   nginx_test
2.查看所有的镜像(容器),包括停止的
[root@localhost ~]# docker ps -a   #docker ps --all的简写
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   9 minutes ago       Up 9 minutes                 0.0.0.0:8080->80/tcp   nginx_test
221d4db980cb        hello-world         "/hello"                 4 days ago          Exited (0) 4 days ago                               boring_goldstine
9f26757c16f4        docker.io/nginx     "/docker-entrypoin..."   4 days ago          Exited (1) 4 days ago                               elated_wing
3.如果想删除正在运行一个镜像,需要先停掉所在的容器,然后再删除容器,再删除镜像
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   6 seconds ago       Up 4 seconds        0.0.0.0:8080->80/tcp   nginx_test
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                        PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   21 minutes ago      Up 21 minutes                 0.0.0.0:8080->80/tcp   nginx_test
221d4db980cb        hello-world         "/hello"                 4 days ago          Exited (0) 4 days ago                                boring_goldstine
9f26757c16f4        docker.io/nginx     "/docker-entrypoin..."   4 days ago          Exited (1) 4 days ago                                elated_wing
停止容器:
[root@localhost ~]# docker stop 221d4db980cb  #如果镜像没有运行,可以不执行这步
221d4db980cb
删除容器:
[root@localhost ~]# docker container rm 221d4db980cb
221d4db980cb
删除镜像:
[root@localhost ~]# docker image rm hello-world
Untagged: hello-world:latest
Untagged: docker.io/hello-world@sha256:2498fce14358aa50ead0cc6c19990fc6ff866ce72aeb5546e1d59caac3d0d60f
Deleted: sha256:feb5d9fea6a5e9606aa995e879d862b825965ba48de054caab5ef356dc6b3412
Deleted: sha256:e07ee1baac5fae6a26f30cabfe54a36d3402f96afda318fe0a96cec4ca393359


1.强制删除镜像:
docker image rm -f hello-world  
简写:docker rmi -f +镜像id
2.强制删除容器:
dcoker rm -f +容器id 
3.查看镜像/容器/数据卷空间:
docker system df
4.运行容器:
docker run -itd --name nginx-test01 -p 8080:80 nginx
以交互模式后台运行容,进入容器退出后不会关闭容器
5.进入容器内部:
docker exec -it 容器id bash
6.导出镜像:
docker export 容器id > test.tar
7.保存镜像:
docker save -o test.tar 镜像Id
8.导入镜像
docker import test.tar test01
指定导入镜像
docker load -i test.tar
9.列出正在运行的镜像:
docker ps
10.列出所有的镜像,运行和没有运行的:
docker ps -a
11.列出所有拉取的镜像:
docker images

保存镜像:
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                  PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   About an hour ago   Up About an hour        0.0.0.0:8080->80/tcp   nginx_test
9f26757c16f4        docker.io/nginx     "/docker-entrypoin..."   5 days ago          Exited (1) 5 days ago                          elated_wing
[root@localhost ~]# docker save -o nginx.tar docker.io/nginx
[root@localhost ~]# ls
anaconda-ks.cfg  nginx.tar  wget-log
启动已经停止的容器:
[root@localhost ~]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                      PORTS               NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   2 hours ago         Exited (0) 19 minutes ago                       nginx_test
9f26757c16f4        docker.io/nginx     "/docker-entrypoin..."   5 days ago          Exited (1) 5 days ago                           elated_wing
[root@localhost ~]# docker container start 8d2d3a4b246b
8d2d3a4b246b
[root@localhost ~]# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
8d2d3a4b246b        nginx               "/docker-entrypoin..."   2 hours ago         Up 7 seconds        0.0.0.0:8080->80/tcp   nginx_test

相关的报错:
[root@localhost ~]# docker run -d --name nginx-test -p 8081:80 nginx
/usr/bin/docker-current: Error response from daemon: Conflict. The container name "/nginx-test" is already in use by container 002858b8c5ff615c5d98f47a6dd11956b055dd24b8a5616cadced36635cdbb67. You have to remove (or rename) that container to be able to reuse that name..
See '/usr/bin/docker-current run --help'.
[root@localhost ~]# docker stop 002858b8c5ff615c5d98f47a6dd11956b055dd24b8a5616cadced36635cdbb67
002858b8c5ff615c5d98f47a6dd11956b055dd24b8a5616cadced36635cdbb67
[root@localhost ~]# docker container rm 002858b8c5ff615c5d98f47a6dd11956b055dd24b8a5616cadced36635cdbb67
002858b8c5ff615c5d98f47a6dd11956b055dd24b8a5616cadced36635cdbb67
[root@localhost ~]# docker run -d --name nginx-test -p 8081:80 nginx
5c3c986da3c23d33b3d04a27e2ca0427341e2be18d67f640d2751a6421790068
[root@localhost ~]# docker ps 
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
5c3c986da3c2        nginx               "/docker-entrypoin..."   4 seconds ago       Up 3 seconds        0.0.0.0:8081->80/tcp   nginx-test
[root@localhost ~]# netstat -tunlp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      75012/mysqld        
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      47874/nginx: master 
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1201/sshd           
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1649/master         
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      109047/zabbix_agent 
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      109244/zabbix_serve 
tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      120532/php-fpm: mas 
tcp6       0      0 :::8081                 :::*                    LISTEN      128619/docker-proxy 
tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd           
tcp6       0      0 ::1:25                  :::*                    LISTEN      1649/master         
tcp6       0      0 :::10050                :::*                    LISTEN      109047/zabbix_agent 
tcp6       0      0 :::10051                :::*                    LISTEN      109244/zabbix_serve 
udp        0      0 127.0.0.1:323           0.0.0.0:*                           842/chronyd         
udp6       0      0 ::1:323                 :::*                                842/chronyd       

docker 后台启动+目录挂载+映射端口

Docker可以映射文件,并且映射的文件必须存在,如果不存在,会认为是目录。映射的文件内容会传递到容器,并不是将镜像中现有的文件复制出来。所以,如果需要映射单个文件,需要先编辑好并放置在目录中
docker run -itd -v 主机目录:容器内目录

[root@localhost docker]# docker run -itd --name nginx_1 -p 8082:80 -v /usr/local/docker/nginx:/etc/nginx/conf.d/ nginx
313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d
[root@localhost docker]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
313d6d3dfd42        nginx               "/docker-entrypoin..."   3 seconds ago       Up 3 seconds        0.0.0.0:8082->80/tcp   nginx_1
验证:docker inspect 容器id

1.如果挂载目录有问题需要先停掉pod,修改后重新启动pod

2.注意:如果映射地址有问题需要修改config.v2.json和hostconfig.json两个文件的对应的地址
[root@localhost docker]# cd /var/lib/docker/containers/
[root@localhost containers]# ls
313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d
[root@localhost containers]# cd 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d/
[root@localhost 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d]# ll
总用量 24
drwx------ 2 root root    6 2月  24 16:19 checkpoints
-rw-r--r-- 1 root root 2989 2月  27 18:14 config.v2.json
-rw-r--r-- 1 root root 1209 2月  27 18:14 hostconfig.json
-rw-r--r-- 1 root root   13 2月  27 18:14 hostname
-rw-r--r-- 1 root root  174 2月  27 18:14 hosts
-rw-r--r-- 1 root root   76 2月  27 18:14 resolv.conf
-rw-r--r-- 1 root root   71 2月  27 18:14 resolv.conf.hash
drwxr-xr-x 3 root root   18 2月  27 18:14 secrets
drwxrwxrwt 2 root root   40 2月  27 18:14 shm
1.先停止容器
[root@localhost 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
313d6d3dfd42        nginx               "/docker-entrypoin..."   3 days ago          Up 20 hours         0.0.0.0:8082->80/tcp   nginx_1
[root@localhost 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d]# docker stop 313d6d3dfd42
313d6d3dfd42
[root@localhost 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d]# docker ps -a
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                     PORTS               NAMES
313d6d3dfd42        nginx               "/docker-entrypoin..."   3 days ago          Exited (0) 2 seconds ago                       nginx_1
2.编辑config.v2.json
注意:在编辑的时候可能会出现配置文件堆在一起,没有格式
需要在编辑的时候输入:%!python -m json.tool

3.编辑hostconfig.json
注意:在编辑的时候可能会出现配置文件堆在一起,没有格式
需要在编辑的时候输入:%!python -m json.tool

4.启动容器
[root@localhost 313d6d3dfd42692773bb6cbdce98494b154bfdb65e3a5b630c157d1c61aad46d]# docker start 313d6d3dfd42

dockerfile

FROM          # 基础镜镜像,一切从这里开始构建
MAINTAINER    # 镜像是谁写的,姓名+邮箱
RUN           # 镜像构建的时候需要运行的命令
ADD           # 步骤: tomcat镜像,这个tomcat压缩包! 添加内容
WORKDIR       # 镜像的工作目录
VOLUME        # 挂载的目录
EXPOSE        # 暴露端口配置
CMD           # 指定这个容器启动的时候要运行的命令,只有最后一个会生效,可被替代
ENTRYPOINT    # 指定这个容器启动的时候要运行的命令,可以追加命令
ENV           # 构建的时候设置环境变量

docker 网络 

自定义网络

--driver 指定网络模式  
--subnet 指定ip/ip段
--gateway 指定网关
[root@localhost ~]# docker network create --driver bridge --subnet 192.168.0.0/16 --gateway 192.168.0.1 mynet

 

 启动四个个nginx,在启动的过程中两个加上自定义的网络,两个不加

nginx-1 加自定义网络mynet
nginx-2 加自定义网络mynet
nginx-01 不加自己网络mynet,默认启动
nginx-02 不加自己网络mynet,默认启动

 如果想nginx-1和nginx-01可以通讯,需要如下配置

  

[root@localhost ~]# docker network connect mynet nginx-01

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小邋遢2.0

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值