docker、Dockerfile、docker-compose学习记录

安装ubuntu
安装docker:

	#更新数据源
      apt-get update# :安装所需依赖
	 sudo apt-get install \
    		apt-transport-https \
    		ca-certificates \
    		curl \
    		gnupg-agent \
    		software-properties-common  #安装GPG证书
	curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg| sudo apt-key add -#新增数据源
	add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_ release -cs) stable"#更新并安装Docker CE


再更新加速源《https://38b8lbmr.mirror.aliyuncs.com》这个你登陆阿里网站,自己都有一个专属的,直接复制粘贴就行,这个比 vi /etc/docker/daemon.json 再填写快多了
tee /etc/docker/daemon.json <<-'EOF'
{
    
    
  "registry-mirrors": ["https://38b8lbmr.mirror.aliyuncs.com"]
}
EOF

apt-get install docker-ce docker-ce-cli containerd.io
###################
ufw allow 8080 //开启虚拟机8080端口

使用:

docker images //查看镜像
docker image -ls 
docker ps //查看启动的容器
docker ps -a //查看所有容器,包括未启动的

docker logs -f myiot ##查看容器日志	

ip -a //可以查看docker的ip与相应运行的容器网络	

docker run -p 8080:8080 --name tomcat -d tomcat //启动一个tomcat镜像,就是产生了一个容器,对应端口为 宿主机端口:docker端口 --name为取个别名 -d为以守护进程运行,就不会打印日志到屏幕了 后面的那个tomcat是镜像名称
docker stop 容器名称或者id //通知容器
docker rmi tomcat //删除镜像
docker rm 32cea2bceb9f //删除容器,不能删除正在运行的容器
docker rm -f 32cea2bceb9f //强制删除容器,可以删除正在运行的容器

docker exec -it 32cea2bceb9f /bin/bash //进入到相应的容器内部,可以修改容器中的配置文件
exit //退出容器

docker container prune //删除所有停止的容器

docker volume ls //查看所有数据卷
docker volume rm [volume_name] //删除指定数据卷
docker volume rm $(docker volume ls -qf dangling==true) //删除所有未关联的数据卷

###dockers开启mysql容器

docker run --name min-mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql:5.7.19

###自己部署web应用 构建镜像

首先将自己的war或者jar拷贝到虚拟机的/user/local/docker/中,方便操作,
用户的应用一般是在/user/local/中
再:vi Dockerfile  
填写一个最简单的:FROM tomcat:latest  //相当于继承latest版本的tomcat,latest可以填写其它固定版本
COPY iot.war /usr/local/tomcat/webapps  //复制iot.war到docker中的/user/local/tomcat/webapps/目录下去
然后: docker build -t [image_name] .    //构建镜像,【.】是使用当前目录的Dockerfile
然后就可以通过docker images查看镜像啦

#####复杂点的

FROM tomcat:latest

##执行删除命令
RUN rm -rf /usr/local/tomcat/webapps/ROOT/*

##复制压缩文件到指定目录
COPY myiot.tar.gz /usr/local/tomcat/webapps/ROOT

##到指定工作目录 ,指定容器初始目录
WORKDIR /usr/local/tomcat/webapps/ROOT

##解压并删除
RUN tar -zxvf myiot.tar.gz\
	&& rm -rf myiot.tar.gz

##暴露8080端口
EXPOSE 8080

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Dockerfile指令
/*********

***  FROM         选择那个基础镜像文件
***  RUN          构建镜像阶段执行命令
***  ADD <src> <dest>       添加文件,从src目录复制文件到容器的dest,
			                其中src可以是Dockerfile所在目录的相对路径,
		 	                也可以是一个URL,还可以是一个压缩包
***  COPY         拷贝文件,和ADD命令类似,但不支持URL和压缩包
***  CMD(只能出现一次)    容器启动后执行命令
***  EXPOSE       声明容器在运行时对外提供的服务端口,可以声明多次,暴露多个端口
***  WORKDIR      指定容器工作目录,或者跳转到那个目录下
***  ENV          指定环境变量
***  ENTRYPOINT(只能一次)  容器入口,ENTRYPOINT和CMD指令的目的一样,
                             都是指定Dockerfile容器启动时执行的命令,可多次设置,
                             但是只有最后一个有效
***  USER          该指令用于设置启动镜像时的用户或者UID,
                   写在该指令后的RUN、CMD以及ENTRYPOINT
                   指令都将使用该用户执行命令
***  VOLUME                指定挂载点,该指令使容器中的一个目录具有持久化存储的功能,
                           该目录可被容器本身使用,也可共享给其他容器,
                           当容器中的应用有持久化数据的需求可以
                           在Dockerfile中使用该指令,格式为 : VOLUME["/data"]*****/

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

##########################docker-compose

##启动docker-compose
docker-compose up -d
##停止docker-compose
docker-compose down
##配置docker-compose.yml
      
version: '3.1'
services:
      mysql:
            restart: always
            image: mysql
            container_name: mysql
            ports:
                - 3306:3306
            volumes:
                - '/home/ljo/work/mysql_db:/var/lib/mysql' ##宿主机上的文件夹要有可写权限
            enviroment:
                MYSQL_ROOT_PASSWORD: 123456
            command:
                --default-authentication-plugin=mysql_native_password
                --character-set-server=utf8mb4
                --collation-server=utf8mb4_general_ci
                --explicit_defaults_for_timestamp=true
                --lower_case_table_names=1
      adminer: ###数据库的一个PHP管理web端
            image: adminer
            restart: always
            ports:
                - 8081:8080
      tomcat:
            restart: always
            image: tomcat
            container_name: tomcat
            ports:
                - 8080:8080  ##这个后面的8080和上面那个adminer的8080不冲突,因为容器是隔离的
            volumes:
                - /home/ljo/work/webapps:/usr/local/tomcat/webapps ##宿主机上的文件夹要有可写权限
            environment:
                TZ: Asia/Shanghai  ##时区
######################GiyLab
version: '3'
services:
      web:
         image: 'twang2218/gitlab-ce-zh'
         restart: always
         hostname: ' 192.168.75.145'
         environment:
                 TZ: 'Asia/Shanghai'
                 GITLAB_OMNIBUS_CONFIG:
                         external_ur1 'http://192.168.75.145'
                         gitlab_rails['gitlab_shell_ssh_port'] = 2222
                         unicorn['port'] = 8888
                         nginx['listen_ port'] = 80
                 ports:  
                        - '80:80'
                        - '443:443'
                        - '2222:22'
                 volumes: 
                        - /home/ljo/work/config:/etc/gitlab
                        - /home/ljo/work/data:/var/opt/gitlab
                        - /home/ljo/work/logs:/var/log/gitlab
##################### 下面使用了一个网络my_net使得这两个容器可以相互通信,
##################### ip连接就可以使用容器名称进行了
version: '3.1'
services:
       myMQTT:
            restart: always
            image: golang:latest
            container_name: myMQTT
            ports:
                - 9990:9090
            volumes: 
                - '/home/ljo/work/mqtt:/go/src/'
            environment:
                TZ: Asia/Shanghai  ##时区
            networks:
                #- default
                - my_net
            command: go run /go/src/study_one_day/web/webServer.go
       mqtt-server:
            restart: always
            image: mqtt-server:latest
            container_name: mqtt-server
            # volumes:
                    # - '/home/ljo/work/mqtt/apollo:/apollo'
            ports:
                - 61613:61613
                - 61614:61614
                - 61624:61624
                - 61623:61623
                - 61680:61680
                - 61681:61681
            environment:
                TZ: Asia/Shanghai  ##时区
                #  command:  ./apollo-broker run

            networks:
                    # - default
                 - my_net
networks:
     my_net:
        external: true

猜你喜欢

转载自blog.csdn.net/qq_41257365/article/details/104375854