From 6a6a00d60ee980d3a18ff780d8ec65d7eb71b3ba Mon Sep 17 00:00:00 2001 From: Jessie Mongeon Date: Fri, 12 Apr 2024 12:49:45 -0500 Subject: [PATCH] Add Docker instructions --- .../ide/_attachments/dev-containers1.png | Bin 0 -> 11144 bytes .../ide/_attachments/dev-containers2.png | Bin 0 -> 18043 bytes .../developer-tools/ide/dev-containers.mdx | 47 +++++++++++++-- .../getting-started/install/index.mdx | 55 +++++++++++++++++- submodules/dfxvm | 2 +- submodules/internetidentity | 2 +- submodules/motoko | 2 +- submodules/quill | 2 +- submodules/response-verfication | 2 +- submodules/samples | 2 +- submodules/sdk | 2 +- 11 files changed, 103 insertions(+), 13 deletions(-) create mode 100644 docs/developer-docs/developer-tools/ide/_attachments/dev-containers1.png create mode 100644 docs/developer-docs/developer-tools/ide/_attachments/dev-containers2.png diff --git a/docs/developer-docs/developer-tools/ide/_attachments/dev-containers1.png b/docs/developer-docs/developer-tools/ide/_attachments/dev-containers1.png new file mode 100644 index 0000000000000000000000000000000000000000..5ee7f6ccc04d77eb08b1c73faef76a07894fa107 GIT binary patch literal 11144 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
  • 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 LNkvXXu0mjf216Qm literal 0 HcmV?d00001 diff --git a/docs/developer-docs/developer-tools/ide/dev-containers.mdx b/docs/developer-docs/developer-tools/ide/dev-containers.mdx index 85aa4da2df..352b23f950 100644 --- a/docs/developer-docs/developer-tools/ide/dev-containers.mdx +++ b/docs/developer-docs/developer-tools/ide/dev-containers.mdx @@ -10,11 +10,39 @@ import { MarkdownChipRow } from "/src/components/Chip/MarkdownChipRow"; ## Overview -Developer containers are a local development option that uses [Docker](https://www.docker.com/get-started/) and [VS Code](https://code.visualstudio.com/) to run local containerized environments. Developer containers are a good option for developers on Windows systems, since `dfx` is not natively supported for local development on Windows. +Developer containers are a local development option that uses [Docker](https://www.docker.com/get-started/) and [VS Code](https://code.visualstudio.com/) to run local containerized environments. Containers are isolated from the rest of your local environment, and files within a container cannot be used by applications outside of the container unless explicitly mounted and given access. Developer containers are a good option for developers on Windows systems, since `dfx` is not natively supported for local development on Windows. + +Dev containers have additional benefits, including: + +- **Replicability**: Containers make reproducing builds across teams easy since they contain the entire development environment within a portable format. Team members can interact with the same container without needing to setup their own personal developer environment and reproduce the build themselves. + +- **Security**: Containers do not have access to the other files or applications on your system, making project development secure. ## Using developer containers -To use developer containers, you must download [Docker](https://www.docker.com/get-started/) and [VS Code](https://code.visualstudio.com/). Then, you can open a GitHub repo in the container using a URL such as: +To use developer containers, you must download [Docker](https://www.docker.com/get-started/), [VS Code](https://code.visualstudio.com/), and the [Dev Containers extension](https://containers.dev/supporting#dev-containers). + +### Creating a blank container + +You can create a blank container by opening the VS Code command palette and running the command: + +``` +> New dev +``` + +![Dev containers 1](./_attachments/dev-containers1.png) + +Then, you'll be prompted to select a new dev container configuration. Search for and select the 'Internet Computer vvv-interactive' template. + +![Dev containers 2](./_attachments/dev-containers2.png) + +This template includes a local version of the ledger and NNS. + +If you want to use a dev container sample, check out the [Internet Computer Start repo](https://github.com/infu/internet-computer-start/tree/main) for dev container samples. + +### Open a GitHub repo in a container + +You can open a GitHub repo in the container using a URL such as: ``` https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=[GITHUB_URL] @@ -26,6 +54,17 @@ For example, to open the ICP Hello World Motoko example, open the URL: https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/dfinity/icp-hello-world-motoko ``` -When prompted, select 'Open Visual Studio Code'. +When prompted, select 'Open Visual Studio Code'. + +Upon opening in VS Code, you may be prompted to install the required plugins to use the developer containers feature. + +## Using Docker directly + +You can also use Docker directly instead of through the VS Code dev containers extension. To use Docker directly, first [install Docker Desktop](https://www.docker.com/products/docker-desktop/) and start the Docker Daemon. Then, open a command line window, pull the DFINITY ICP developer environment Docker image and run an instance of the image: + +``` +docker pull ghcr.io/dfinity/icp-dev-env:latest +docker run --platform linux/x86_64 -dit ghcr.io/dfinity/icp-dev-env:latest +``` + -Upon opening in VS Code, you will be prompted to install the required plugins to use the developer containers feature. diff --git a/docs/developer-docs/getting-started/install/index.mdx b/docs/developer-docs/getting-started/install/index.mdx index 1705ec581e..f9c8addb4d 100644 --- a/docs/developer-docs/getting-started/install/index.mdx +++ b/docs/developer-docs/getting-started/install/index.mdx @@ -74,9 +74,60 @@ You can download and install the latest version of the - There is no native support for dfx on Windows. However, by installing the Windows Subsystem for Linux (WSL), you can run dfx also on a Windows system as described below. + There is no native support for dfx on Windows. However, you can develop ICP canisters on Windows using a Docker container or by installing the Windows Subsystem for Linux (WSL). - ## Installing WSL 2 + ## Using Docker + + Docker is a containerization software that allows you to run a localized version of another operating system, such as Linux, then run Linux-based software and applications. Containers do not have access to the files and applications outside of the container unless given explicit permission. + + To use Docker, first [install Docker Desktop](https://www.docker.com/products/docker-desktop/). + + Open the Docker Desktop application to start the Docker Daemon. Then, open a command line window and pull the DFINITY ICP developer environment Docker image: + + ``` + docker pull ghcr.io/dfinity/icp-dev-env:latest + ``` + + Then, run an instance of this Docker image with the command: + + ``` + docker run --platform linux/x86_64 -dit ghcr.io/dfinity/icp-dev-env:latest + ``` + + Confirm that your container is running by using the `docker ps` command: + + ``` + CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES + b197b1da16df ghcr.io/dfinity/icp-dev-env:latest "bash" 37 seconds ago Up 36 seconds peaceful_lumiere + ``` + + Now you can navigate into your Docker container and begin running commands such as `dfx`. To navigate into the canister, run the command: + + ``` + docker exec -it bash + ``` + + Replace `` with the canister name shown in the `docker ps` output. + + If successful, your command line prompt will change such as: + + ``` + root@b197b1da16df:/# + ``` + + Verify that `dfx` has been installed and is ready to use by running the command: + + ``` + dfx --version + ``` + + This should return the version of `dfx` that was installed: + + ``` + dfx 0.18.0 + ``` + + ## Using WSL 2 Follow Microsoft's instructions for installing the Windows Subsystem for Linux. Make sure you are running Windows 10 (version 2004 or higher) or Windows 11. ### Supported WSL Versions diff --git a/submodules/dfxvm b/submodules/dfxvm index 3ee75f4919..002f7abb50 160000 --- a/submodules/dfxvm +++ b/submodules/dfxvm @@ -1 +1 @@ -Subproject commit 3ee75f49195676d0f6323b680efb2fab9a7edb0d +Subproject commit 002f7abb5089e3fd59294d55e483e632884d29af diff --git a/submodules/internetidentity b/submodules/internetidentity index ba982be1f6..cc01b261ae 160000 --- a/submodules/internetidentity +++ b/submodules/internetidentity @@ -1 +1 @@ -Subproject commit ba982be1f627af53a9f411e5bd68fc3f5005adef +Subproject commit cc01b261ae65370e90e81d72f9c4fbaca242d91e diff --git a/submodules/motoko b/submodules/motoko index fba7afbbbc..0549a0472d 160000 --- a/submodules/motoko +++ b/submodules/motoko @@ -1 +1 @@ -Subproject commit fba7afbbbc15ead40373f0c0721dd1d234e163de +Subproject commit 0549a0472dd2b863606503ff17e5be4b56582de4 diff --git a/submodules/quill b/submodules/quill index 1f8ef9dc89..c81433eb4b 160000 --- a/submodules/quill +++ b/submodules/quill @@ -1 +1 @@ -Subproject commit 1f8ef9dc89115772338b8553f36bddf7c50ba4d7 +Subproject commit c81433eb4b3f94a6e307ee4daf2e8d8053e61fda diff --git a/submodules/response-verfication b/submodules/response-verfication index 5160c84e76..0b6580ff4b 160000 --- a/submodules/response-verfication +++ b/submodules/response-verfication @@ -1 +1 @@ -Subproject commit 5160c84e76a0046f91884060949924e834781467 +Subproject commit 0b6580ff4beca3525f1ddd127aeab198facb279f diff --git a/submodules/samples b/submodules/samples index 6c38a5d4de..d2060e5d59 160000 --- a/submodules/samples +++ b/submodules/samples @@ -1 +1 @@ -Subproject commit 6c38a5d4def5da7308ae1c7b61de62045876868a +Subproject commit d2060e5d598ceb847aad137fe75b6f4a27bad609 diff --git a/submodules/sdk b/submodules/sdk index ddd01458bc..d8940ef3b5 160000 --- a/submodules/sdk +++ b/submodules/sdk @@ -1 +1 @@ -Subproject commit ddd01458bc6cae61402de37930dd4bca48183aac +Subproject commit d8940ef3b59a4cf5aacc3e972d2610a9928e6a55